你如何捕获SailsJS中的所有错误

Wil*_*att 2 node.js sails.js

我是Node and Sails的新手,并且几周来一直在努力解决这个问题.我需要记录(最终到文件或数据库)我们的Sails应用程序中发生的所有错误.我找到了几个接近解决这个问题的答案,但似乎没有一个能够100%完成.我根据这个问题的答案设置了一些东西

使用Sails v0.9.16时,我在config/500.js文件中设置我的日志,但是在使用测试代码时...

t.t;
Run Code Online (Sandbox Code Playgroud)

...在我的控制器中,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);
        });
}
Run Code Online (Sandbox Code Playgroud)

sgr*_*454 6

在Sails v0.10中,您有自定义响应来处理错误,因此您不需要像示例中那样提供自定义中间件.默认情况下,大多数的错误(即那些没有明确触发res.forbidden(),res.notFound()或其他处理)将被送达serverError,生活在响应api/responses/serverError.js.您可以自定义此操作以执行任何操作.

如果您已将v0.9应用程序升级到v0.10,则可能没有该api/responses文件夹.没问题; 只需sails new whatever在空目录中使用即可生成新的v0.10项目,并将api/responses文件夹从新项目复制到旧项目中!