koa如何处理响应错误?

发布于 2022-09-05 09:01:25 字数 1438 浏览 12 评论 0

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' }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如若梦似彩虹 2022-09-12 09:01:25

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文