es6 - koa如何处理响应错误?
本文介绍了es6 - koa如何处理响应错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
app.js
const port = 3000;
const Koa = require('koa');
const Ctrl = require('koa-route');
const app = new Koa();
const FileManager = require('./module/file_manager.js');
app.use(Ctrl.get('/api/item_list', async (ctx) => {
ctx.set('Cache-Control', 'no-cache');
ctx.body = await FileManager.getItemList();
}))
app.listen(port);
file_manager.js
const fs = require('fs');
module.exports = {
getItemList() {
return new Promise((res, rej) => {
fs.readFile('./user_info.json', 'utf-8', (err, data) => {
err ? rej(err) : res(data);
})
})
}
}
简单说就是app.js通过file_manager.js读取一个json文件,然后作为响应返回。这样写可以获得正确的响应。
我想问一下,如果需要对错误处理,比如当没有这个文件的时候,ctx.body
响应主体是一个错误信息的json,ctx.status = 404
,该如何写?
初学者,见谅
更改后的app.js,在响应前增加了错误处理
app.use(async (ctx, next) => {
try{
await next();
}catch(e){
console.log(e);
ctx.body = `catch error:${e}`;
}
})
catch到的错误如下
{ Error: ENOENT: no such file or directory, open 'E:\test\wedding_invitation\
ding_invitation\user_info.json'
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path: 'E:\\test\\wedding_invitation\\wedding_invitation\\user_info.json' }
解决方案
koa的思路是将所有异步函数按注册顺序包裹成一个壳子:
async func0 {
async func1{
async func2 {
// netsted...
}
}
}
所以你只要在注册router之前,先注册一个错误处理函数就可以了:
app.use(async(ctx, next) => {
try {
await next();
} catch (e) {
// TODO
} finally {
// TODO
}
});
app.use(other middleware);
这篇关于es6 - koa如何处理响应错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文