不像表达中在末尾处注册一个声明为(下)呃,点播,res,中间件的方式,高雅刚好相反,在开头进行注册。
接下来app.use(异步(ctx)=比;{ 尝试{ 等待下一个(); }捕捉(err) { ctx。状态=犯错。状态| | 500; ctx。身体=err.message; ctx.app。发出(“错误”,呃,ctx); } }); >之前这样程序中任何报错都会收敛到此处。此时可以方便地将错误打印到页面,开发时非常便捷。
+ ctx.app。发出(‘错误’,呃,ctx);高雅也建议通过应用程序来派发错误,然后通过监听程序上的错误事件对这些错误做进一步的统一处理和集中管理。
app.on(“错误”,(呃,ctx)=比;{/*错误的集中处理: *日志出来 *写入日志 *写入数据库 *…… */}); >之前一个错误捕获并打印到页面的示例:
const高雅=要求(“高雅”); const应用=new高雅(); 接下来app.use(异步(ctx)=比;{ 尝试{ 等待下一个(); }捕捉(err) { const状态=犯错。状态| | 500; ctx。状态=状态; ctx。类型=癶tml”; ctx。身体=' & lt; b> ${地位}& lt;/b>${犯错} ”;//emmit ctx.app。发出(“错误”,呃,ctx); } }); app.use (ctx=比;{ const=澳愫谩?=癶ello world !”;//TypeError:分配常数变量。 ctx。身体=一个; }); app.on(“错误”,(呃,ctx)=比;{ console.error(“糟糕. .\ n”,错); }); app.listen (3000); >之前通过节点服务器。js启动后访问页面可看到命令行的错误输出。
如果使用pm2,可通过-no-daemon参数使其停留在在命令行以查看输出。
如果不使用上述参数,可通过pm2日志(应用名称)来查看。
<强> ctx。把强>
朴素的抛错方式需要手动设置状态码及信息对客户端的可见性。
const呃=新的错误(“呃”味精); 犯 错。状态=401; 犯 错。暴露=true; 把犯错,暴露决定是否会返回错误详情给客户端,否则只展示状态对应的错误文案,比如500会在浏览器中展示为内部服务器错误。
而通过<代码> ctx。把代码>这个辅助方法会更加简洁。
上面的代码片段等价于:
ctx。把(401年,“呃”味精);如果不指定状态码,默认为500.5 xx类错误暴露默认为假,即不会将错误信息返回到响应。
抛错时还可以传递一些额外数据,这些数据会合并到错误对象上,在处理错误的地方可以从错误上获取。
app.use (ctx=比;{ ctx。把(401年,“access_denied”{用户:{名称:“foo”}}); }); app.on(“错误”,(呃,ctx)=比;{ console.error(“糟糕. .\ n”, err.user); }); >之前<强>参考强>
错误处理
ctx。把
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
高雅中的错误处理解析