Kraken JS中间件和例外

时间:2014-12-27 16:01:03

标签: node.js express kraken.js

我正在尝试使用KrakenJS,尝试构建一个基本的API来理解事物。

我不确定的一件事是中间件,特别是404/500错误处理。

"fileNotFound": {
    "enabled": true,
    "priority": 130,
    "module": {
            "name":"path:./lib/exceptions/404"
    }
}

这会捕获任何404错误,然后我自己处理我自己的配置。但是,为什么抛出这个fileNotFound?对于500个错误,serverError在哪里被抛出?

我想为403之类的其他异常定义自己的文件,但是如何才能触发中间件?

1 个答案:

答案 0 :(得分:0)

正如@HeadCode所提到的,请务必阅读meddleware以了解中间件如何更好地加载。

尽管如此,我们还是要做一些事情才能让事情变得更加清晰。


处理404s

首先,让我们回顾一下如何在普通的快递应用程序中注册404处理程序。

通常情况下,您的中间件延续链中最终的中间件只是假设,如果我们在没有挽救的情况下做到这一点,我们根本无法找到资源。这是一个例子:

var express = require('express');
var app = express();

app.get('/firstRoute', function handler(req, res) { res.send('found me'); });
app.get('/secondRoute', function handler(req, res) { res.send('found me');  });

app.use(function notFoundHandler(req, res, next) {
    res.status(404).send('Route Not Found');
});

app.listen(8000, function onListen() { console.log('listening on 8000...'); });

routes are resolved in the order they're added in Express 4开始,只要您的404处理程序是最后一个,您就可以确定没有其他路由匹配。

Express FAQs

简要描述了这种模式

处理500s

现在让我们继续前进到500s。

Express具有错误处理中间件的概念(也在Express site上描述)。错误处理中间件需要4个arity(即,需要4个参数),这是唯一的区别。只有在通过将对象传递到next电话中发出错误信号时才会执行它们。代码中更容易解释:

var express = require('express');
var app = express();

app.get('/firstRoute', function handler(req, res) { res.send('found me'); });
app.get('/secondRoute', function handler(req, res) { throw new Error('oops'); });

app.use(function notFoundHandler(req, res, next) {
    res.status(404).send('Route Not Found');
});

app.use(function errorHandler(err, req, res, next) {
    res.status(500).send('Broken. :(');
});

app.listen(8000, function onListen() { console.log('listening on 8000...'); });

在上面的示例中,errorHandler仅在以下情况下执行:1)另一个中间件或路由处理程序抛出错误或2)我们使用参数*,.e.g调用next。 next(new Error('oops'))

继续前进吧。如果您访问/notFound或任何随机路线,您将正确获得404.如果您访问/firstRoute,您将获得found me,如果您访问secondRoute 1}}你得到Broken. :(


kraken怎么样?

Kraken - 或更准确地说,meddleware - 只是将您的中间件定义到您的配置中。你在上面复制的那个json的小块在功能上基本上等同于以下香草快递应用程序:

var fileNotFound = require('./lib/exceptions/404');

// ... app.use() everything with a priority lower than 130 ...
app.use(fileNotFound());
// ... app.use() everything with a priority *greater* than 130 ...