从POST访问中隐藏Node.js& Express中的错误消息

时间:2017-07-13 08:24:22

标签: node.js express

我使用Express.js运行基于Node.js的Restful API服务器。

今天,我意识到当有人使用像curl -X POST ~这样的Curl发送请求时,有人可以获取我的源代码错误的信息,包括我的服务器的目录路径。

我收到错误消息:

  

TypeError:无法读取属性' text'未定义的       at exports.list(/usr/local/node/XXX/routes/message.js:49:36)       在回调(/usr/local/node/XXX/node_modules/express/lib/router/index.js:124:37)       在param(/usr/local/node/XXX/node_modules/express/lib/router/index.js:118:11)       在param(/usr/local/node/XXXv/node_modules/express/lib/router/index.js:125:11)

如何在服务器显示错误时隐藏这些关键信息?

4 个答案:

答案 0 :(得分:0)

如果您不想发送任何消息,请发送此类回复

res.sendStatus(500);

如果您想发送堆栈跟踪,也可以在快捷设置中使用错误处理程序

var errorHandler = require('errorhandler');
    .....//define app as express object
    if (process.env.NODE_ENV === 'development') {
      // only use in development 
      app.use(errorhandler())
    }

答案 1 :(得分:0)

您可以创建一个中间件来处理所有未处理的错误。

app.use((err, req, res, next) => {
  if (err) {
    return res.sendStatus(500);
  }
  next();
});

这将向创建此类错误的任何用户返回500内部服务器错误状态代码。记得把它放在中间件链的末尾。

答案 2 :(得分:0)

我将NODE_ENV标志设置为production,因为Express.JS在这种模式下不发送堆栈数据。我建议您在npm中检出dotenv模块。

答案 3 :(得分:0)

  

如果您将错误传递给next(),并且未在自定义错误处理程序中进行处理,则该错误将由内置错误处理程序处理;错误将与堆栈跟踪一起写入客户端。 堆栈跟踪不包含在生产环境中。

     

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

在运行Node.js抑制堆栈跟踪时,将环境变量NODE_ENV设置为production。仍会显示在控制台上。