我使用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)
如何在服务器显示错误时隐藏这些关键信息?
答案 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()
,并且未在自定义错误处理程序中进行处理,则该错误将由内置错误处理程序处理;错误将与堆栈跟踪一起写入客户端。 堆栈跟踪不包含在生产环境中。
在运行Node.js抑制堆栈跟踪时,将环境变量NODE_ENV
设置为production
。仍会显示在控制台上。