从 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
Post 请求 Node.js 和 React 的 CORS 错误