typescript 用于res.send的Express.js中间件,在每个res.send()上调用函数

luaexgnf  于 2023-02-25  发布在  TypeScript
关注(0)|答案(2)|浏览(124)

目前我正在使用express.js和
我想发送这样的通用响应格式:

res.send({status : 'suceess' , msg : '' , data : [] });

从所有控制器(处理我的路线的功能)
我尝试过的:
某些Controller. js中

someFuntion(req,res,next)
{
    // these two lines will be in each controller , that I don't want
    // want it to be automated , and minimal as much as possible
    res.body({status : 'suceess' , msg : '' , data : [] });
    next();
}

在middleware. js中强文本

functions responseHandler(req,res)
{
    // perform some operation with req.body
    res.send(req.body);
}

位于服务器. js

app.use('/',someFuntion);
app.use(responseHandler);

我只是不想在所有的控制器中重复相同的json格式,有没有更好的方法?

w6lpcovy

w6lpcovy1#

为什么不使用一个文件来接收res和要发送的输入数据呢?假设你创建了一个文件
responseHandler.js

module.exports = function (res , data){

   res.send({status:data.status,msg:data.msg,data:data.data});
};

controller.js

var response = require("responseHandler");

someFuntion(req,res,next)
{
    // these two lines will be in each controller , that I don't want
    // want it to be automated , and minimal as much as possible
   // res.body({status : 'suceess' , msg : '' , data : [] });
    data.status = 'sucess';
    data.msg='';
    data.data=[];
    response(res,data)
    next();
}

您可以使用这种方法,并且可以更好地优化它。我已经使用过这种方法。您可以在ResponseHandler文件中使用两个函数,一个用于错误,一个用于当前数据。

lb3vh1jj

lb3vh1jj2#

这应该能满足你的要求...
ResponsePayloadProcessor.js

exports.ResponsePayloadProcessor = (req, res, next) => {
    res.ResponsePayload = {status : '' , msg : '' , data : [] };

    next();
};

app.js

const express = require('express');
const app = express()
app.use(ResponsePayloadProcessor);
app.post('/endpoint', (req,res) => {
        res.ResponsePayload = {
            {status : 'suceess' , msg : '' , data : [] }
        };
        res.send(res.ResponsePayload);
    }
}

相关问题