C++面向物件之友元類
阿新 • • 發佈:2022-03-08
使用 try catch 來處理錯誤
const Koa = require('koa') const app = new Koa() app.use(async ctx => { try { JSON.parse('abc') ctx.body = 'Hello Koa' } catch (error) { ctx.response.status = 500 // 設定狀態碼 ctx.body = '伺服器內部錯誤' } }) app.listen(4001)
- 使用 try catch 手動處理錯誤
使用上下文中的 throw 方法處理錯誤
const Koa = require('koa') const app = new Koa() app.use(async ctx => { try { JSON.parse('abc') ctx.body = 'Hello Koa' } catch (error) { ctx.throw(500) // 狀態碼500 並且會響應 Internal Server Error } }) app.listen(4001)
- 使用 ctx.throw 方法快速設定狀態碼
利用洋蔥圈模型統一處理錯誤
const Koa = require('koa') const app= new Koa() app.use(async (ctx, next) => { try { await next() } catch (error) { ctx.status = 500 ctx.body = '服務端內部錯誤' } }) app.use(ctx => { JSON.parse(abc) ctx.body = 'hello koa' }) app.listen(4001)
- 後續所有中介軟體執行過程中發生異常都會通過洋蔥圈模型中的第一個中介軟體來處理
監聽實現錯誤處理
const Koa = require('koa') const fs= require('fs') const { promisify } = require('util') const readFile = promisify(fs.readFile) const app = new Koa() app.use( (ctx, next) => { console.log(1) next() }) app.use(async ctx => { const data = await readFile('****') ctx.type = 'html' ctx.body = data }) app.on('error', error => { console.log(error) }) app.listen(4001)