无锡网站优化推广方案,单页面 网站,赣州建设局 网站,山东住建厅官网二建说明
能够熟练的掌握错误的抛出,可以在一定程度上提高代码的开发效率和可读性
构造错误
本栗采用调用一个不存在的函数来抛出错误
const Koa require(koa);
const app new Koa();// 响应时间输出中间件
app.use(async (ctx, next) {await next();// 获取响应头,印证…说明
能够熟练的掌握错误的抛出,可以在一定程度上提高代码的开发效率和可读性
构造错误
本栗采用调用一个不存在的函数来抛出错误
const Koa require(koa);
const app new Koa();// 响应时间输出中间件
app.use(async (ctx, next) {await next();// 获取响应头,印证执行顺序const rt ctx.response.get(X-Response-Time);console.log(输出倒计时: ${ctx.method} ${ctx.url} - ${rt});
});// 响应时间统计中间件
app.use(async (ctx, next) {const start Date.now();console.log(开始计时);await next();const ms Date.now() - start;ctx.set(X-Response-Time, ${ms}ms);console.log(结束计时);
})// 响应
app.use(async ctx {await sleep(250);ctx.status 200;ctx.type html;ctx.body h1Hello Koa/h1
})注: 函数的执行顺序:
根据洋葱模型: 首先执行 const start Date.now()console.log(开始计时);遇到await next()跳到下一个中间件,并将await next()后面的代码入一个函数调用栈执行await sleep(250)由于sleep函数未定义,于是抛出错误
注: 部分api说明: const rt ctx.response.get(X-Response-Time): 获取请求头部中’X-Response-Time’的值ctx.set(X-Response-Time, ${ms}ms): 返回头部’X-Response-Time’添加值
koa级别抛出错误,并获取处理错误
抛出错误不进行处理将该中间件放在倒数第二个中间件的位置.
// 错误处理
app.use(async (ctx, next) {try {await next();} catch (error) {ctx.status error.statusCode || error.status || 500;ctx.body error.message;// 触发应用层级的错误事件ctx.app.emit(error, error, ctx);console.log(中间件捕捉:, error.message);}
})说明:
try{ await next() }: 尝试运行下一个中间件,如果遇到错误则运行catch块中的代码ctx.body error.message: 用户级别的抛出错误,用于再浏览器中提醒用户错误的信息ctx.app.emit(error, error, ctx): koa框架应用层级的错误,错误的标识为’error’,可以通过app.on(error)来进行处理.由于此处没有app.on(error),因此会默认的执行以下语句
// 其实不存在
app.on(error, err{console.error(err);
})使用app.on(error, err{}) 处理
// 抛出node层级的错误,
// 向上层抛出错误
app.on(error, err{throw err;
})注: 后台直接挂掉.