国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Node后端框架Express與Koa接口統(tǒng)一響應(yīng)封裝

這篇具有很好參考價(jià)值的文章主要介紹了Node后端框架Express與Koa接口統(tǒng)一響應(yīng)封裝。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

背景

以前在寫 SpringBoot 全棧開發(fā)的系列文章中全棧開發(fā)之后端腳手架:SpringBoot集成MybatisPlus代碼生成,分頁(yè),雪花算法,統(tǒng)一響應(yīng),異常攔截,Swagger3接口文檔,有提到對(duì)后端接口的響應(yīng)數(shù)據(jù)進(jìn)行統(tǒng)一的封裝,方便前端或者第三方進(jìn)行數(shù)據(jù)獲取與對(duì)接工作;統(tǒng)一響應(yīng)一般包含狀態(tài)碼、消息內(nèi)容、數(shù)據(jù)內(nèi)容等。

這里對(duì) 2017 年寫的一個(gè)基于 Node.jsExpress.js 框架開發(fā)的后端項(xiàng)目的接口進(jìn)行類似的封裝。

通用狀態(tài)碼與信息封裝

/**
 * @author ycx
 * @description 業(yè)務(wù)異常通用code
 *
 */
class BaseResultCode {
    /***********************************/
    /**
     * code
     */
    code;
    /**
     * 說(shuō)明
     */
    desc;

    constructor(code, desc) {
        this.code = code;
        this.desc = desc;
    }

    /************************************/
    static SUCCESS = new BaseResultCode(200, '成功');
    static FAILED = new BaseResultCode(500, '失敗');
    static VALIDATE_FAILED = new BaseResultCode(400, '參數(shù)校驗(yàn)失敗');
    static API_NOT_FOUNT = new BaseResultCode(404, '接口不存在');
    static API_BUSY = new BaseResultCode(429, '操作過(guò)于頻繁')
}

module.exports = BaseResultCode

Note: 上面的 class 寫法對(duì) Node.js 的版本有要求, 10.x 報(bào)錯(cuò), 12.x 可以使用。

Node后端框架Express與Koa接口統(tǒng)一響應(yīng)封裝,Node.js,全棧開發(fā),Node.js,Express.js,統(tǒng)一響應(yīng)封裝,Node.js面向?qū)ο? referrerpolicy=

統(tǒng)一響應(yīng)封裝

const ResultCode = require('./BaseResultCode');
/**
 * @author ycx
 * @description 統(tǒng)一返回結(jié)果
 */
class Result {
    /**
     * 返回code
     */
    code;
    /**
     * 返回消息
     */
    msg;
    /**
     * 返回?cái)?shù)據(jù)
     */
    data;
    /**
     * 返回時(shí)間
     */
    time;

    /**
     * 
     * @param code {number} 返回code
     * @param msg {string} 返回消息
     * @param data {any} 返回具體對(duì)象
     */
    constructor(code, msg, data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
        this.time = Date.now();
    }

    /**
     * 成功
     * @param data {any} 返回對(duì)象
     * @return {Result}
     */
    static success(data) {
        return new Result(ResultCode.SUCCESS.code, ResultCode.SUCCESS.desc, data);
    }

    /**
     * 失敗
     */
    static fail(errData) {
        return new Result(ResultCode.FAILED.code, ResultCode.FAILED.desc, errData);
    }

    /**
     * 參數(shù)校驗(yàn)失敗
     */
    static validateFailed(param) {
        return new Result(ResultCode.VALIDATE_FAILED.code, ResultCode.VALIDATE_FAILED.desc, param);
    }

    /**
     * 攔截到的業(yè)務(wù)異常
     * @param bizException {BizException} 業(yè)務(wù)異常
     */
    static bizFail(bizException) {
        return new Result(bizException.code, bizException.msg, null);
    }
}
module.exports = Result

返回?cái)?shù)據(jù)時(shí)進(jìn)行封裝

封裝好統(tǒng)一的響應(yīng)后,在 Express.js 后端項(xiàng)目中怎么使用?先是引入: const Result = require("../common/Result"); ,然后直接使用 Result.success() 或者 Result.fail() 返回?cái)?shù)據(jù)或錯(cuò)誤信息。

Node后端框架Express與Koa接口統(tǒng)一響應(yīng)封裝,Node.js,全棧開發(fā),Node.js,Express.js,統(tǒng)一響應(yīng)封裝,Node.js面向?qū)ο? referrerpolicy=

const router = express.Router();
const Result = require("../common/Result");

router.get("/:productName/:deviceName", function(req, res) {
    let productName = req.params.productName;
    let deviceName = req.params.deviceName;
    Device.findOne({
        "product_name": productName,
        "device_name": deviceName
    }, function(err, device) {
        if (err) {
            res.send(Result.fail(err));
        } else {
            if (device != null) {
                Connection.find({
                    device: device._id
                }, function(_, connections) {
                    res.json(Result.success(Object.assign(device.toJSONObject(), {
                        connections: connections.map(function(conn) {
                            return conn.toJSONObject();
                        })
                    })))
                })
            } else {
                res.status(404).json({
                    error: "Not Found"
                });
            }
        }
    })
});
router.put("/:productName/:deviceName/suspend", function(req, res) {
    let productName = req.params.productName
    let deviceName = req.params.deviceName
    Device.findOneAndUpdate({
        "product_name": productName,
        "device_name": deviceName
    }, {
        status: "suspended"
    }, {
        useFindAndModify: false
    }).exec(function(err, device) {
        if (err) {
            res.send(Result.fail(err));
        } else {
            if (device != null) {
                device.disconnect();
            }
            res.status(200).send(Result.success("ok"));
        }
    })
});

Note:順便在這里簡(jiǎn)單總結(jié)下 Express.js 獲取請(qǐng)求參數(shù)的幾種方法:

  1. req.query.productName,對(duì)應(yīng)http://localhost:3000/device?productName=product
  2. req.params.productName,對(duì)應(yīng)http://localhost:3000/device/:productName
  3. req.headers[“productname”],獲取頭信息中的參數(shù),注意小寫~
  4. req.body.productName,Express.js無(wú)法直接獲取Post請(qǐng)求的參數(shù),需要設(shè)置body解析中間件,app.use(express.urlencoded())

可能遇到的問題

Express 請(qǐng)求沒有響應(yīng) 日志顯示:-- ms

原因:在響應(yīng)時(shí)沒有調(diào)用 res.send() 或者 next() 向下執(zhí)行,導(dǎo)致最終沒有結(jié)果返回給調(diào)用方。

router.put("/:productName/:deviceName/suspend", function(req, res) {
    let productName = req.params.productName
    let deviceName = req.params.deviceName
    Device.findOneAndUpdate({
        "product_name": productName,
        "device_name": deviceName
    }, {
        status: "suspended"
    }, {
        useFindAndModify: false
    }).exec(function(err, device) {
            if (err) {
                res.send(err));
        } else {
            if (device != null) {
                device.disconnect();
            }
            Result.success("ok");
        }
    })
});

解決方法: 將 Result.success 放到 res.send() 里,就像這樣: res.send(Result.success("ok"))

結(jié)果展示

Node后端框架Express與Koa接口統(tǒng)一響應(yīng)封裝,Node.js,全棧開發(fā),Node.js,Express.js,統(tǒng)一響應(yīng)封裝,Node.js面向?qū)ο? referrerpolicy=

小總結(jié)

上述內(nèi)容記錄了對(duì) Node.js 后端框架 Express.js (如果使用的是 Koa.js ,方法也類似)的接口進(jìn)行統(tǒng)一響應(yīng)封裝的方法以及可能遇到的問題,后端開發(fā)時(shí),對(duì)響應(yīng)和異常進(jìn)行統(tǒng)一封裝有幾個(gè)好處:

  1. 統(tǒng)一風(fēng)格:通過(guò)封裝,可以確保所有的響應(yīng)和異常都遵循相同的格式和風(fēng)格,使代碼更加一致和易于理解。
  2. 便于維護(hù):統(tǒng)一封裝可以讓你更容易地管理和維護(hù)響應(yīng)和異常的邏輯,而不必在每個(gè)地方都重復(fù)相同的代碼。
  3. 安全性:通過(guò)封裝異常,可以更好地處理錯(cuò)誤情況,確保系統(tǒng)的安全性和穩(wěn)定性。
  4. 易于擴(kuò)展:封裝可以讓你更容易地?cái)U(kuò)展和修改響應(yīng)和異常的處理邏輯,而不必改動(dòng)大量的代碼。

總之,統(tǒng)一封裝可以提高代碼的可維護(hù)性、安全性和可擴(kuò)展性,這是在進(jìn)行 HTTP 接口開發(fā)時(shí)的一個(gè)最佳實(shí)踐。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-754240.html

Reference

  • code筆記:nodeJS框架 express 接口統(tǒng)一返回結(jié)果設(shè)計(jì)

到了這里,關(guān)于Node后端框架Express與Koa接口統(tǒng)一響應(yīng)封裝的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • nodejs框架 express koa介紹以及從零搭建 koa 模板

    操作 請(qǐng)求類型 url 返回 獲取所有 GET /users 獲取單個(gè) GET /users/1 新增 POST /users 修改部分 PATCH /users/1 修改全部 PUT /users/1 刪除 DELETE /users/1 一個(gè)路由由 請(qǐng)求方法 路徑 和 回調(diào)函數(shù)組成 匹配 404 路由 獲取請(qǐng)求報(bào)文參數(shù) 獲取動(dòng)態(tài)路由參數(shù) 獲取 post 請(qǐng)求體參數(shù) 下載 響應(yīng) 中間件本質(zhì)是

    2024年02月14日
    瀏覽(31)
  • 一站式統(tǒng)一返回值封裝、異常處理、異常錯(cuò)誤碼解決方案—最強(qiáng)的Sping Boot接口優(yōu)雅響應(yīng)處理器

    作者:京東物流?覃玉杰 Graceful Response是一個(gè)Spring Boot體系下的優(yōu)雅響應(yīng)處理器,提供一站式統(tǒng)一返回值封裝、異常處理、異常錯(cuò)誤碼等功能。 使用Graceful Response進(jìn)行web接口開發(fā)不僅可以節(jié)省大量的時(shí)間,還可以提高代碼質(zhì)量,使代碼邏輯更清晰。 強(qiáng)烈推薦你花3分鐘學(xué)會(huì)它!

    2024年02月03日
    瀏覽(23)
  • node實(shí)戰(zhàn)——koa實(shí)現(xiàn)文件下載和圖片/pdf/視頻預(yù)覽(node后端儲(chǔ)備知識(shí))

    node實(shí)戰(zhàn)——koa實(shí)現(xiàn)文件下載和圖片/pdf/視頻預(yù)覽(node后端儲(chǔ)備知識(shí))

    大家好,我是yma16,本文分享關(guān)于node實(shí)戰(zhàn)——koa實(shí)現(xiàn)文件下載和圖片預(yù)覽。 本文適用對(duì)象 :前端初學(xué)者轉(zhuǎn)node方向,在校大學(xué)生,即將畢業(yè)的同學(xué),計(jì)算機(jī)愛好者。 node系列往期文章 node_windows環(huán)境變量配置 node_npm發(fā)布包 linux_配置node node_nvm安裝配置 node筆記_http服務(wù)搭建(渲染

    2024年02月05日
    瀏覽(31)
  • node中間件-koa框架

    安裝 npm i koa koa導(dǎo)出的是一個(gè)類,必須用 new 進(jìn)行創(chuàng)建 koa也是通過(guò)注冊(cè)中間件來(lái)完成請(qǐng)求操作的 koa注冊(cè)的中間件提供了兩個(gè)參數(shù): ctx:上下文(Context)對(duì)象; koa并沒有像express一樣,將req和res分開,而是將它們作為ctx的屬性; ctx代表一次請(qǐng)求的上下文對(duì)象; ctx.reque

    2024年02月16日
    瀏覽(33)
  • node筆記_koa框架是什么?

    大家好,我是yma16,本文介紹node的一個(gè)web框架koa。 往期文章 node_windows環(huán)境變量配置 node_npm發(fā)布包 linux_配置node

    2024年02月07日
    瀏覽(24)
  • 【node進(jìn)階】一文帶你快速入門koa框架

    【node進(jìn)階】一文帶你快速入門koa框架

    ? 作者簡(jiǎn)介:一名普通本科大三的學(xué)生,致力于提高前端開發(fā)能力 ? 個(gè)人主頁(yè):前端小白在前進(jìn)的主頁(yè) ?? 系列專欄 : node.js學(xué)習(xí)專欄 ?? 個(gè)人社區(qū) : 個(gè)人交流社區(qū) ?? 學(xué)習(xí)格言: ?? 打不倒你的會(huì)使你更強(qiáng)!?? ?? 刷題網(wǎng)站:這段時(shí)間有許多的小伙伴在問有沒有什么

    2024年01月22日
    瀏覽(23)
  • 用前端的語(yǔ)言寫后端——Node.js之Express

    Express 是一種流行的模型視圖控制器(MVC)Node.js框架,具有快速、極簡(jiǎn)和靈活的優(yōu)點(diǎn),為Web和移動(dòng)應(yīng)用程序開發(fā)提供了強(qiáng)大的功能集合。 最受歡迎的Node.js框架! 安裝Node.js(你肯定已經(jīng)安裝好了Node.js,這點(diǎn)我們無(wú)需多言) 為你的應(yīng)用創(chuàng)建一個(gè)目錄,進(jìn)入此目錄并以此目錄為你

    2024年03月21日
    瀏覽(30)
  • 圖書商城項(xiàng)目練習(xí)②后端服務(wù)Node/Express/Sqlite

    圖書商城項(xiàng)目練習(xí)②后端服務(wù)Node/Express/Sqlite

    本系列文章是為學(xué)習(xí)Vue的項(xiàng)目練習(xí)筆記,盡量詳細(xì)記錄一下一個(gè)完整項(xiàng)目的開發(fā)過(guò)程。面向初學(xué)者,本人也是初學(xué)者,搬磚技術(shù)還不成熟。項(xiàng)目在技術(shù)上前端為主,包含一些后端代碼,從基礎(chǔ)的數(shù)據(jù)庫(kù)(Sqlite)、到后端服務(wù)Node.js(Express),再到Web端的Vue,包含服務(wù)端、管理

    2024年02月11日
    瀏覽(25)
  • 【node進(jìn)階】淺析Koa框架---ejs模板|文件上傳|操作mongoDB

    【node進(jìn)階】淺析Koa框架---ejs模板|文件上傳|操作mongoDB

    ? 作者簡(jiǎn)介:一名普通本科大三的學(xué)生,致力于提高前端開發(fā)能力 ? 個(gè)人主頁(yè):前端小白在前進(jìn)的主頁(yè) ?? 系列專欄 : node.js學(xué)習(xí)專欄 ?? 個(gè)人社區(qū) : 個(gè)人交流社區(qū) ?? 學(xué)習(xí)格言: ?? 打不倒你的會(huì)使你更強(qiáng)!?? ?? 刷題網(wǎng)站:這段時(shí)間有許多的小伙伴在問有沒有什么

    2024年01月25日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包