【金秋打卡】第17天 《Node.js+Koa2+MySQL 打造前后端分離精品項目》
课程名称:Node.js+Koa2+MySQL打造前后端分离精品项目《旧岛》
课程章节:第5章 LinValidator校验器与Sequelize Orm生成MySQL数据表
视频:5-1 Lin-Validator使用指南
课程讲师: 七月
课程内容:
处理未知异常,之前课程只处理了已知的异常,现在处理一下未知异常。
//改造后的exception.js
//注意else后边的代码是处理未知异常
const { HttpException } = require("../core/http-exception")
const catchErrof = async (ctx, next) => {
try {
await next()
} catch (error) {
if (error instanceof HttpException) {
ctx.body = {
msg: error.msg,
error_code: error.errorCode,
request: `${ctx.method} ${ctx.path}`,
}
ctx.status = error.code
}
else {
//处理未知异常
ctx.body = {
msg: '我们遇到了一个错误 ~~~',
error_code: 999,
request: `${ctx.method} ${ctx.path}`
}
ctx.status = 500
}
}
}
module.exports = catchErrofclassic.js中 if(true)之前随便写一点不符合javascript语法的代码,就能触发未知异常。
//触发未知异常时得到的返回
{
"msg": "我们遇到了一个错误 ~~~",
"error_code": 999,
"request": "POST /v1/4/classic/latest"
} Lin-Validator
接收来,但是为验证的参数,一般是不敢直接使用的。
//validtator.js
const { LinValidator, Rule } = require('../../core/lin-validator')
class PositiveIntegerValidator extends LinValidator {
constructor() {
super()
this.id = [
new Rule('isInt', '需要是正整数', {min:1})
]
}
}
module.exports = {
PositiveIntegerValidator
}const Router = require('koa-router')
const router = new Router()
const {PositiveIntegerValidator} = require('../../validator/validator')
router.post('/v1/:id/classic/latest', (ctx, next) => {
const path = ctx.params
const query = ctx.request.query
const headers = ctx.request.header
const body = ctx.request.body
const v = new PositiveIntegerValidator().validate(ctx)
// true 仅仅为了测试
// if (true) {
// const error = new global.errs.ParameterExcetion()
// throw error
// }
// ctx.body = {
// key: 'classic',
// path: path,
// query,
// headers,
// body
// }
//throw new Error('API Exception')
})
module.exports = router课程收获:
只处理已知异常是不够的。未知异常也要进行处理。
可以自定一个校验类,用来校验是否为正整数,继承LinValidator,写好校验规则。
在classic.js中直接引入并使用即可。
七月老师非常注重在讲编程知识的同时,讲编程思维,讲知识和知识之间的关系。编程是实践性非常强的工作,学习知识最好的方法是放到项目中。做项目的目的不是做项目,最终要做出来自己的项目,业务承载的是编程知识。明天继续刷后边的课程。
點擊查看更多內容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
