第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

【金秋打卡】第16天 《Node.js+Koa2+MySQL 打造前后端分離精品項(xiàng)目》

標(biāo)簽:
Node.js JavaScript

课程名称:Node.js+Koa2+MySQL打造前后端分离精品项目《旧岛》

课程章节:第4章【深入浅出讲异常】异步异常与全局异常处理

视频:4-8 特定异常类与global全局变量

课程讲师: 七月


课程内容:

给特定的异常定义异常类:如果认为每次new HttpException的时候传参麻烦,可以在新建一个参数错误的异常类,继承自HttpException。当出现参数错误时,直接new这个新类即可。

//改造后的代码,
class HttpException extends Error{
    constructor(msg='服务器异常', errorCode=10000, code=400) {
        super()
        this.errorCode = errorCode
        this.code = code
        this.msg = msg
    }
}

//创建新类,继承自HttpException
class ParameterExcetion extends HttpException {
    constructor(msg, errorCode) {
        super()
        this.code = 400
        this.msg = msg || '参数错误'
        this.errorCode = errorCode || 10000
    }
}
//不要忘记把新类也导出
module.exports = {
    HttpException,
    ParameterExcetion
}
//改造后的classic.js
const Router = require('koa-router')
const router = new Router()
const { HttpException, ParameterExcetion } = require('../../../core/http-exception')

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

    // true 仅仅为了测试
    if (true) {
        const error = new ParameterExcetion() //注意这里直接new新类。
        throw error
    }
    ctx.body = {
        key: 'classic',
        path: path,
        query,
        headers,
        body
    }

    //throw new Error('API Exception')
})


module.exports = router
//调用后的返回
{
    "msg": "参数错误",
    "error_code": 10000,
    "request": "POST /v1/4/classic/latest"
}

调用之后,所有返回信息都是ParameterException中定义好的返回参数。也可以向ParameterException中传参

如果不想每次都先引入再new,可以把http-exception放在global里边。 代码见下

//改造后的init.js
const requireDirectory = require("require-directory");
const Router = require('koa-router')
class InitManager {

    //入口方法
    static initCore(app) {
        InitManager.app = app
        InitManager.initLoadRouters()  
        InitManager.loadHttpException()
    }

    static initLoadRouters() {
        const apiDirectory = `${process.cwd()}/app/api`
        requireDirectory(module, apiDirectory, {
            visit: whenLoadModule
        })

        function whenLoadModule(obj) {
            if (obj instanceof Router) {
                InitManager.app.use(obj.routes())
            }
        }
    }
    //这是新建的方法
    static loadHttpException() {
        const errors = require('./http-exception')
        global.errs = errors
    }
}

module.exports = InitManager
const Router = require('koa-router')
const router = new Router()

//注意这里把之前的引入删掉了。

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

    // true 仅仅为了测试
    if (true) {
        //注意这里是新的调用方法,从global中直接调用
        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

课程收获:

这节课是给特定的异常定义异常类,这些写的好处是可以复用(本项目中复用,甚至也可以在其他项目中复用)。之后讲了更省事的方法,如果不想每次都先引入再new,可以把http-exception放在global里边。这样直接从global中取到ParameterException即可。


七月老师非常注重在讲编程知识的同时,讲编程思维,讲知识和知识之间的关系。编程是实践性非常强的工作,学习知识最好的方法是放到项目中。做项目的目的不是做项目,最终要做出来自己的项目,业务承载的是编程知识。明天继续刷后边的课程。

https://img1.sycdn.imooc.com//636b9fc700018a9811420645.jpg

https://img1.sycdn.imooc.com//636ba2000001491c11350633.jpg

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消