我是Node和Sails的新手,并且已经在几周内一直在努力解决这个问题。我需要记录(最终到文件或数据库)我们的Sails应用程序中发生的所有错误。我找到了几个接近解决这个问题的答案,但似乎没有一个能够100%完成。我根据this question
的答案设置了一些内容使用Sails v0.9.16时,我在config / 500.js文件中设置我的日志,但在使用测试代码时......
t.t;
...在我的控制器中,Sails只打印出" ReferenceError:t未定义"。它永远不会到500.js.在Sails v0.10.0-rc5中,相同的测试代码将转到我的自定义500中间件(如下所示)。
问题出现在Sails v0.10.0-rc5中,似乎中间件路由器在访问我的自定义400中间件之前处理了400错误消息。
我们还没有承诺我们将使用哪个版本,但是让它在一个或另一个中工作可能会让我们想到。
那么如何解决所有发生的错误?如果我走在正确的轨道上,我错过了什么才能让它发挥作用?
提前致谢!
为v0.9.16显示的代码不多......除了在500.js文件中添加sails.log之外,我认为我没有更改任何内容...
以下是v0.10.0-rc5 ...
的自定义中间件设置 loadMiddleware: function(app, defaultMiddleware, sails) {
// Use the middleware in the correct order
app.use(defaultMiddleware.startRequestTimer);
app.use(defaultMiddleware.cookieParser);
app.use(defaultMiddleware.session);
app.use(defaultMiddleware.bodyParser);
app.use(defaultMiddleware.handleBodyParserError);
app.use(defaultMiddleware.methodOverride);
app.use(defaultMiddleware.poweredBy);
app.use(defaultMiddleware.router); //400s do not make it past this...
app.use(defaultMiddleware.www);
app.use(defaultMiddleware.favicon);
app.use(function(req, res, next ) {
sails.log("400 error caught in middleware - " + err.stack);
next();
});
app.use(function(err, req, res, next){
sails.log("500 error caught in middleware - " + err.stack);
next(err);
});
}
答案 0 :(得分:6)
在Sails v0.10中,您有custom responses来处理错误,因此您不需要像示例中那样提供自定义中间件。默认情况下,大多数错误(即未由res.forbidden()
,res.notFound()
或其他处理程序专门触发的错误)将由serverError
生成的api/responses/serverError.js
响应提供。您可以自定义此选项以执行任何操作。
如果您已将v0.9应用升级到v0.10,则可能没有api/responses
文件夹。没问题;只需在空目录中使用sails new whatever
即可生成新的v0.10项目,并将api/responses
文件夹从新项目复制到旧项目中!