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

Posted

技术标签:

【中文标题】从 POST 访问中隐藏 Node.js&Express 中的错误消息【英文标题】:Hiding error message in Node.js&Express from POST access 【发布时间】:2017-12-17 22:04:14 【问题描述】:

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

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

我收到的错误消息:

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

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

【问题讨论】:

您必须小心处理错误,我认为没有其他选择。您可能需要考虑承诺,它不仅有助于异步过程,还有助于处理错误。 介意删除 django-rest-framework 标志,因为它完全不相关? 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

这将向任何创建此类错误的用户返回 500 Internal Server Error 状态代码。请记住将其放在中间件链的末尾。

【讨论】:

【参考方案3】:

如果您将错误传递给next(),并且您没有在自定义错误处理程序中处理它,它将由内置错误处理程序处理;错误将通过堆栈跟踪写入客户端。 生产环境中不包含堆栈跟踪。

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

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

【讨论】:

【参考方案4】:

如果您不想发送任何消息,只需向他们发送这种回复

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())
    

【讨论】:

以上是关于从 POST 访问中隐藏 Node.js&Express 中的错误消息的主要内容,如果未能解决你的问题,请参考以下文章

在POST请求结束之前无法访问最近保存的数据 - node.js

node.js处理post请求

Post 请求 Node.js 和 React 的 CORS 错误

在 V8 JavaScript (Chrome & Node.js) 中访问行号

如何在 node.js 中处理 POST 请求

通过 POST 请求将数据从 node.js 服务器发送到 node.js 服务器