koa里如何设置统一的返回状态码?

发布于 2022-09-07 20:37:14 字数 1288 浏览 23 评论 0

1.本人新手,看了好多文档,用koa2+koa-generator+monogoDB搭建了个demo,试图去写一些简单的接口。
但是问题来了,如何统一设置返回的格式呢?或者我的项目目录需要如何设置,结构需要怎么样的优化?

目前的目录:

图片描述

2.例如:查询用户的接口,代码如下

const router = require('koa-router')()
const db = require('monk')('127.0.0.1:27017/test1') //中间件连接数据库

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:'参数错误'
        }    
    }
})

module.exports = router

3.通过get请求可以查询到数据,但是如何统一设置返回的格式呢?
总不能每个接口都单独这样写:

if(getParams._id){
    ctx.body = {
        code:200,
        msg:"success",
        content:await table1Data.find({_id:getParams._id})
    }
}else {
    ctx.body = {
        code:0,
        msg:"error",
        content:'参数错误'
    }    
}

4.或者有没有其他的优化建议。蟹蟹各位大佬

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

初懵 2022-09-14 20:37:14

封装一个额外组件,我这边刚好写一个类似的。

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;

使用的时候,code想用number也行,自己重新用数组重新封装一下,问题不大,在编程的时候,可以随时到这个文件注册新的返回码和解释。

使用的时候只需要import R from responseBeautifier,
用R.set(data)即可获得返回的数据结构了

controller怎么设置还是看你自己。

其实这个reponseBeautifier还比较简单,有特殊需求也可以写一个完整结构,每次需要的时候创建一个新对象可能更好,比较符合ctx.body的设定

漫雪独思 2022-09-14 20:37:14

统一返回格式换句话说就是有一个返回格式类或处理函数。比如我可以在之前加个中间件定义一个ctx.state.success的方法,然后ctx.state.success(content),方式都差不多。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文