ошибка с использованием log4js в узле при передаче объекта запроса для журнала

извините за мой английский, я пытаюсь использовать log4js для установки журнала вызовов API в экспрессе, я застрял с этим, когда пытаюсь зарегистрировать patition.

http_outgoing.js:503
    throw new errors.Error('ERR_HTTP_HEADERS_SENT', 'set');
    ^

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at validateHeader (_http_outgoing.js:503:11)
    at ServerResponse.setHeader (_http_outgoing.js:510:3)
    at ServerResponse.header (/src/react/impex/jumbo-react-flat/apilogica/node_modules/express/lib/response.js:767:10)
    at ServerResponse.send (/src/react/impex/jumbo-react-flat/apilogica/node_modules/express/lib/response.js:170:12)
    at ServerResponse.json (/src/react/impex/jumbo-react-flat/apilogica/node_modules/express/lib/response.js:267:15)
    at Request.request.get [as _callback] (/src/react/impex/jumbo-react-flat/apilogica/controllers/database.js:62:40)
    at self.callback (/src/react/impex/jumbo-react-flat/apilogica/node_modules/request/request.js:185:22)
    at Request.emit (events.js:180:13)
    at Request.emit (domain.js:422:20)
    at Request.onRequestError (/src/react/impex/jumbo-react-flat/apilogica/node_modules/request/request.js:881:8)

это моя функция журнала с log4js, она получает объект запроса и получает некоторые разные параметры для действия журнала.

var logger = require('log4js');


exports.logapi = function (service,vars) {
  var ip = vars.connection.remoteAddress;
  debugger;
  logger.configure({
    appenders: { 
      out:{type:'console'},
      access: { type:'dateFile', filename: '../logs/access.log', category:'info'  } ,
      error: { type:'dateFile', filename: '../logs/error.log', category:'error' },

    }
  });

  log = logger.getLogger('access');
console.log(vars.query.canal);
  log.info('Servicio:'+service+ '; Fecha:' + Date.now() +'; Canal:'+vars.query.canal+'; IP'+ip+'; Usuario:'+vars.query.user+' token:'+vars.query.token);


  return;
}

вот как я вызываю функцию журнала, когда функция API получает петицию, это другая функция модуля

var apicall = require('./log');
exports.getproduct = function (req, res) {
    res.header('Content-Type', 'application/json');
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Content-Type');
var reqlog=req;
apicall.logapi('setnewproduct',reqlog);

   request.get({
        "headers": { "content-type": "application/json" },
        "url": "http://localhost:3001/controller_producto/productos/"+req.params.id
    }, (error, response, body) => {
        if(error) {
            return res.sendStatus(400).json({
                error: 'Que verguenza! Ocurrio un error, intentalo nuevamente en unos minutos'
              })
        }else{

            return res.send(body);}

    });


};

person Pablo    schedule 30.08.2018    source источник


Ответы (1)


Да, проблема в том, что в Express вы не можете установить заголовки после отправки ответа клиенту, и в этом случае вам нужно отложить обработчик ошибок по умолчанию. Видеть:

https://expressjs.com/en/guide/error-handling.html

person Sergio Flores    schedule 03.04.2019