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

时间:2014-05-05 20:47:03

标签: node.js sails.js

我是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);
        });
}

1 个答案:

答案 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文件夹从新项目复制到旧项目中!