nodejs之koa2 – 错误处理

如果代码运行过程中发生错误,我们需要把错误返回给用户,根据 HTTP 协议约定,这是我们要返回 500 的状态码,表示服务器内部出现错误。

ctx.throw()

koa 提供了 ctx.throw() 方法用来抛出错误,我们可以直接 ctx.throw(500,就是抛出500的错误,类似下面例子

app.use(async (ctx,next) => {
    ctx.throw(500);

值得注意的是,如果将 ctx.response.status 设置成对应的状态码,效果跟 ctx.throw() 是一样的,比如设置成 404

app.use(async (ctx,next) => {
    ctx.response.status = 404;
    ctx.response.body = 'Page Not Found';

try…catch…

为了更加方便的处理错误,使用 try…catch… 将错误捕获是比较好的,但是每个请求都写感觉太麻烦,其实我们可以定义一个中间件负责对所有的错误进行处理,

app.use(async (ctx,next) => {
        await next()
    }catch(err){
        ctx.response.status = err.statusCode || err.status || 500;
        ctx.response.body = {
            message: err.message

监听 error 事件

其实,koa 还有一个 error 事件监听,如果代码运行发生错误,就会出发这个事件,我们也可以用它来处理错误

app.on('error', (err, ctx) =>
    console.error('server error', err);

有一点需要注意的是,如果错误已经被 try…catch 捕获,那么就不会出发 error 事件。这是就必须释放 error 事件,
调用 ctx.app.emit() ,手动释放 error 事件,koa 监听函数才会生效,否则监听事件是不会触发的。

app.use(async (ctx,next) => {
        await next()
    }catch(err){
        ctx.response.status = err.statusCode || err.status || 500;
        ctx.response.body = {
            message: err.message
        // 手动释放error事件
        ctx.app.emit('error', err, ctx);
// 继续触发error事件
app.on('error',() => {
    console.error('server error', err.message);
    console.error(err);

debug

开发中用到的最多的就是 debug(开发模式),我们可以通过启动启动脚本配置,在浏览器中也可以对服务端进行 debug。

启动项目时,运行下面的命令

node --inspact app.js

出现下面的字样就是成功了

浏览器访问,打开控制台,出现 node 的小 logo
koa

点击打开 node 调试窗口,愉快的打断点调试吧
koa

启动命令可以修改为 npm run debug,在 package.json 中的 scripts 中添加如下代码就可以了

“debug”: “node --inspect app.js”,

至此,koa 错误处理介绍完毕,可以愉快的写代码了,下一篇,小弟就记录一下koa session和cookie的使用。

本文纯手打,有不当之处请留言!如果对小伙伴们有帮助的话,点赞啊,谢谢!

|-- api api |-- v1 api版本 |-- auth.js 用户授权接口 |-- index.js 节点-Koa-打字稿项目 该存储库的主要目的是构建良好的项目设置和工作流程,以使用KOA和SQL DB在TypeScript中编写Node api rest。 Koa是由Express背后的团队设计的一种新的Web框架,旨在为Web应用程序和API提供更小,更富表现力和更强大的基础。 通过利用生成器,Koa允许您放弃回调并大大提高错误处理能力。 Koa在内核中未捆绑任何中间件,并提供了一套优雅的方法来使编写服务器变得快速而愉快。 通过Github Actions CI,此样板已部署! 您可以尝试向不同的定义端点发出请求,并查看其工作方式。 为了通过JWT中间件,必须设置以下Authorization标头(已经用样板的秘密签名): 标题(演示) Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEiLCJuYW1lIjoiSmF2aWVyIEF2aWxlcyIsImVtYWlsIjoiYXZpbGVzbG9wZXouamF2aWVyQGdtYWlsLmNvbSJ9.7oxEVGy4VEtaDQyLiuoDvzdO0Ayr 在koa中,获取GET请求源头时koa中request对象中的query方法或querystring方法,query返回是格式化号的参数对象,querystring返回的是请求字符串,由于ctx对request的API有直接引用方式,所以获取GET请求数据有两个途径。koa中间件采用洋葱模型(对于每个中间件,在完成一些事情后,可以非常优雅的将控制权传递给下一个中间件,并能够等待它完成,当后续中间件完成处理后,控制权又回到了自己)koa提供了从上下文直接读取,写入cookie的方法。#安装ejs模板引擎。 与express不同的是导出的还是一个类,而且中间件的参数也只变成了两个,ctx上下文,和Next(源码是dispatch) 请求没结果,直接not found,这也是与express区别的地方,express是没返回直接挂起来,koa是没返回就直接not fountd 这就是一个简单的koa服务器。 koa的中间件, 通过koa创建的app,注册中间件只能使用use方法,koa [1]app.env:默认是NODE_ENV或"development" [2]app.keys:签名的cookie密钥数组 [3]app.proxy:当真正的代理头字段将被信任时 [4]忽略.subdomains的app.subdomainOffset偏移量,默认为2 [5]app.proxyIpHeader:代理ip标头,默认为X-Forwarded-For [6]ap... 原标题:koa中如何优雅地处理异常和错误一异常和错误的抛出1、常见抛出异常和错误类型:● 代码语法不规范造成的JS报错异常● 程序运行中发生的一些未知异常● HTTP错误● 自定义的业务逻辑错误2、不优雅的方式koa框架提供了ctx.throw(400)的方式,可以让我们方便地抛出http错误,但是如果你想同时返回一些有用信息怎么办?也许你会这么做:ctx.status = 400ctx.body... ctx.response.type = 'html'; ctx.response.body = fs.createReadStream('./view/include/test.html')... 当我们在学习戏新东西的时候,我们都难避免用经验去解决一些问题, 在这我要给大家说说nodekoa的异步处理问题,用promise解决的问题 router.get(’/username’,async (ctx ,next)=>{ let username = ctx.url; username = username.split("=")[1] console.log(username) re... 一。错误处理 1.500错误:如代码运行过程发生错误,我们需要把错误信息返回给用户。HTTP协议规定这时要返回500状态吗,koa提供了ctx.throw()方法,用来抛出错误。 const main = ctx =>{ ctx.throw(500); }2.404错误:如将ctx.response.status设置成404,相当于ctx.thow(404),返回404错误 const nodejskoa框架的使用以及一些第三方模块和库 nodejskoa框架的使用以及一些第三方模块和库前言:了解nodejs1、nodejs简介2、nodejs安装2.1、linux安装2.2、Windows安装3、检验是否安装成功4、npm介绍以及使用4.1、npm简介4.2、npm常用命令①、koa基础1、koa创建简单实例1.1、koa简介1.2、koa安装1.3、koa实例(hello,word)2、koa中间件2.1、挂载中间件2.2、上下文2.3、ctx中的参数2.3.1、ctx.requ 安装Koa,官网有很明确的介绍,直接在项目目录下终端中运行npm i koa就行。 Koa概念目录1. Koa概念2. 应用程序2.1 Koa洋葱模型(级联)2.2 应用程序设置2.3 常用的应用程序设置2.4 错误处理3. 上下文3.1 常用API3.2 Request 别名3.3 Response 别名4. 请求(Request)4.1 API5. 响应(Response)5.1 响应头API5.2 响应状态与响应信息API