无缘公子 2020-02-02
最近看了日漫《强风吹拂》,啊啊啊看的我开心,好久没好好看日漫了,找到了一种失去好久的的那种“中二”拼劲!!
ctx.throw(412)
时,status是412,且显示的是Precondition Failed
,可以在抛出的时候写上异常信息ctx.throw(412,‘我是错误信息‘);
;console.log(a.b)
这一行代码由于a变量未定义,导致status是500。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
就会返回。
在调用某些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();