在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ koa里如何設(shè)置統(tǒng)一的返回狀態(tài)碼?

koa里如何設(shè)置統(tǒng)一的返回狀態(tài)碼?

1.本人新手,看了好多文檔,用koa2+koa-generator+monogoDB搭建了個(gè)demo,試圖去寫一些簡(jiǎn)單的接口。
但是問題來了,如何統(tǒng)一設(shè)置返回的格式呢?或者我的項(xiàng)目目錄需要如何設(shè)置,結(jié)構(gòu)需要怎么樣的優(yōu)化?

目前的目錄:

圖片描述

2.例如:查詢用戶的接口,代碼如下

const router = require('koa-router')()
const db = require('monk')('127.0.0.1:27017/test1') //中間件連接數(shù)據(jù)庫

router.prefix('/queryUsers') //接口前綴

let table1Data = db.get('table1');  
router.get('/', async function (ctx, next) {
    let getParams = ctx.request.query;
    ctx.response.type = 'application/json';
    if(getParams._id){
        ctx.body = {
            code:200,
            msg:"success",
            content:await table1Data.find({_id:getParams._id})
        }
    }else {
        ctx.body = {
            code:0,
            msg:"error",
            content:'參數(shù)錯(cuò)誤'
        }    
    }
})

module.exports = router

3.通過get請(qǐng)求可以查詢到數(shù)據(jù),但是如何統(tǒng)一設(shè)置返回的格式呢?
總不能每個(gè)接口都單獨(dú)這樣寫:

if(getParams._id){
    ctx.body = {
        code:200,
        msg:"success",
        content:await table1Data.find({_id:getParams._id})
    }
}else {
    ctx.body = {
        code:0,
        msg:"error",
        content:'參數(shù)錯(cuò)誤'
    }    
}

4.或者有沒有其他的優(yōu)化建議。蟹蟹各位大佬

回答
編輯回答
賤人曾

封裝一個(gè)額外組件,我這邊剛好寫一個(gè)類似的。

let responseBeautifier = new class{
    constructor(){
        this.response = {
            code:"",
            data:{},
            msg:""
        },
        this.StatusCode = new Map();
        this.registeStatusCode("0","OK");
        this.registeStatusCode("-1","ERROR");
    }
    registeStatusCode(code,description){
        this.StatusCode.set(code,description);
    }
    registeStatusCodes(arr){
        for(let [code,description] of arr){
            this.StatusCode.set(code,description);
        }
    }
    set(data,code="0",msg){
        code = code.toString()
        if(this.StatusCode.has(code)){
            return {
                code,
                data,
                msg:this.StatusCode.get(code),
            }
        }else{
            // log Something ,here is an unique code
            return {
                code,
                data,
                msg:msg||"Unresolvable Status Code :"+code,
            }
        }
    }
    error(code="-1",msg){
        code = code.toString()
        if(this.StatusCode.has(code)){
            return {
                code,
                data:{},
                msg:this.StatusCode.get(code),
            }
        }else{
            // log Something ,here is an unique code
            return {
                code,
                data:{},
                msg:msg||"Unresolvable Status Code :"+code,
            }
        }
    }
}();

//registe Status Code 

responseBeautifier.registeStatusCodes([
    ["404","NtFound"], 
    ["200","success"],
    ["1","等待中"],
])


export default responseBeautifier;

使用的時(shí)候,code想用number也行,自己重新用數(shù)組重新封裝一下,問題不大,在編程的時(shí)候,可以隨時(shí)到這個(gè)文件注冊(cè)新的返回碼和解釋。

使用的時(shí)候只需要import R from responseBeautifier,
用R.set(data)即可獲得返回的數(shù)據(jù)結(jié)構(gòu)了

controller怎么設(shè)置還是看你自己。

其實(shí)這個(gè)reponseBeautifier還比較簡(jiǎn)單,有特殊需求也可以寫一個(gè)完整結(jié)構(gòu),每次需要的時(shí)候創(chuàng)建一個(gè)新對(duì)象可能更好,比較符合ctx.body的設(shè)定

2018年4月7日 11:45
編輯回答
厭惡我

統(tǒng)一返回格式換句話說就是有一個(gè)返回格式類或處理函數(shù)。比如我可以在之前加個(gè)中間件定義一個(gè)ctx.state.success的方法,然后ctx.state.success(content),方式都差不多。

2017年11月28日 03:36