前言

在如今应用中,经常会涉及 server 和client 交互,不管是RPC或HTTP的请求,接口返回结果保持统一是大有可为的,这将大大降低了调用方(client)的开发成本。

如何在express 中设计统一返回结果呢?


编码思想

设计一个对象,用此来固定返回结构。

编码

设计一个符合业务规范的数据返回对象

参数说明
code返回码
msg消息体
data数据内容
time返回时间

以下是用code说话时间

编码: 统一返回对象

const BizResultCode = require('./BaseResultCode');

/**
 * @author ycx
 * @description 统一返回结果
 */
class BizResult {
   
    /**
     * 返回code
     */
    code;
    /**
     * 返回消息
     */
    msg;
    /**
     * 返回数据
     */
    data;
    /**
     * 返回时间
     */
    time;

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

    /**
     * 成功
     * @param data {any} 返回对象
     * @return {BizResult}
     */
    static success(data) {
        return new BizResult(BizResultCode.SUCCESS.code, BizResultCode.SUCCESS.desc, data);
    }

    /**
     * 失败
     */
    static fail(errData) {
        return new BizResult(BizResultCode.FAILED.code, BizResultCode.FAILED.desc, errData);
    }

    /**
     * 参数校验失败
     */
    static validateFailed(param) {
        return new BizResult(BizResultCode.VALIDATE_FAILED.code, BizResultCode.VALIDATE_FAILED.desc, param);
    }

    /**
     * 拦截到的业务异常
     * @param bizException {BizException} 业务异常
     */
    static bizFail(bizException) {
        return new BizResult(bizException.code, bizException.msg, null);
    }

}

module.exports = BizResult

编码:设计统一返回code

/**
 * @author ycx
 * @description 业务异常通用code
 *
 */
class BaseResultCode {

    /***********************************/
    /**
     * code
     */
    code;
    /**
     * 说明
     */
    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, '参数校验失败');
    static API_NOT_FOUNT = new BaseResultCode(404, '接口不存在');
    static API_BUSY = new BaseResultCode(700, '操作过于频繁')

}

module.exports =BaseResultCode

在项目中使用他们?,在定义的定义controller层中返回给router 进行send

const BizResult = require("../../../../testing-common/api/BizResult");

/**
 * @author ycx
 * @description home
 */
class HomeController {

    /**
     * index api
     */
    static index() {
       
        const str = 'hello i am ycx';
        //统一返回
        
        return BizResult.success(str);
    }
}

module.exports = HomeController

结语

至此 ,码毕!在设计接口返回时候主要需要coder们自我遵守约定,统一规范。如果项目比较多,保持项目内部约定的统一返回格式风格非常重要。