学习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();