学习koa开发API(五)--- 对异常和参数的处理

最近看了日漫《强风吹拂》,啊啊啊看的我开心,好久没好好看日漫了,找到了一种失去好久的的那种“中二”拼劲!!

KOA自带的错误处理

  • 当我们输入一个不存在的接口路径时status是404;
  • 当我们手动抛出ctx.throw(412)时,status是412,且显示的是Precondition Failed,可以在抛出的时候写上异常信息ctx.throw(412,‘我是错误信息‘);;
  • console.log(a.b)这一行代码由于a变量未定义,导致status是500。

认识koa-json-error

cnpm i koa-json-error --save
const Koa = require('koa');
const app = new Koa();
const error = require("koa-json-error");
const routing = require('./routes');

app.use(error());
// router注册到app
routing(app);

app.listen(3000);

当返回的接口status是412时,返回的内容是:

{
    "message": "我是错误信息",
    "name": "PreconditionFailedError",
    "stack": "PreconditionFailedError: 我是错误信息\n    at Object.throw (E:\\code\\project\\node\\...)..."
    "status": 412
}

当调用了未定义a的接口的时候,返回的内容是:

{
    "name": "ReferenceError",
    "message": "a is not defined",
    "stack": "ReferenceError: a is not defined\n    at get (E:\\code\\project\\node\\...",
    "status": 500
}

当访问不存的接口的时候:

{
    "message": "Not Found",
    "name": "NotFoundError",
    "stack": "NotFoundError: Not Found\n    at Object.throw (E:\\code\\project\\node\\...",
    "status": 404
}

stack中的内容有助于我们在开发阶段改BUG,当上线后将stack的内容暴露给用户并不好,于是我们修改一下:

app.use(error({
  // e 是koa原生返回的error
  postFormat:( e, 
    {stack,...rest})=>process.env.NODE_ENV === 'production'
    ? rest : {stack,...rest}
}));

windows环境安装

cnpm i cross-env --save-dev

修改package.json

"start": "cross-env NODE_ENV=production nodemon app/index.js",
"dev": "nodemon app/index.js"

执行npm start即生产环境,返回的结果不会返回stack的内容,而npm run dev就会返回。

使用koa-parameter 校验参数

在调用某些api的时候我们需要传递一些参数,我们需要对这些参数进行校验。

cnpm i koa-parameter  --save
// index.js
const parameter = require("koa-parameter");
app.use(parameter(app));
// controllers/book.js
class BookCtl {
  get(ctx){
    ctx.verifyParams({
      id:{type:'string',required:true}
    })
    ctx.body = '<h1>获得一本图书</h1>';
  }
}
module.exports = new BookCtl();

相关推荐