扫码一下
查看教程更方便
错误处理在构建 web 应用程序中起着重要作用。 koa 也提供了处理错误的中间件。
在 koa 中,我们添加了一个中间件,它使用 try{}catch(){}
语法来捕获错误。 如果我们在下游遇到任何错误,我们将返回相关的 catch 子句并在此处处理错误。 例如
var koa = require('koa');
var app = new koa();
// 错误处理中间件
app.use(function* (next) {
try {
yield next;
} catch (err) {
this.status = err.status || 500;
this.body = err.message;
this.app.emit('error', err, this);
}
});
// 在下一个中间件中创建错误
// 设置错误信息和状态码并使用上下文对象抛出
app.use(function *(next) {
// 设置状态码和消息
this.throw('error message', 500);
});
app.listen(3000);
我们故意在上面的代码中创建了一个错误,并在我们的第一个中间件的 catch 块中处理了这个错误。 然后将其发送到我们的控制台,并作为响应发送给我们的客户端。 以下是我们触发此错误时收到的错误消息。
internalservererror: error message
at object.throw (/users/jiyik/workspace/node/hello-koa/node_modules/koa/lib/context.js:97:11)
at /users/jiyik/workspace/node/hello-koa/app.js:20:13
at dispatch (/users/jiyik/workspace/node/hello-koa/node_modules/koa-compose/index.js:42:32)
at /users/jiyik/workspace/node/hello-koa/node_modules/koa-convert/index.js:42:43
at generator.next ()
at onfulfilled (/users/jiyik/workspace/node/hello-koa/node_modules/co/index.js:65:19)
at /users/jiyik/workspace/node/hello-koa/node_modules/co/index.js:54:5
at new promise ()
at object.co (/users/jiyik/workspace/node/hello-koa/node_modules/co/index.js:50:10)
at object.topromise (/users/jiyik/workspace/node/hello-koa/node_modules/co/index.js:118:63)
现在任何发送到服务器的请求都会触发这个错误。