gpt4 book ai didi

javascript - 使用node或express返回json格式的正确方法

转载 作者:行者123 更新时间:2023-12-03 00:10:43 25 4
gpt4 key购买 nike

我的问题实际上是从 Proper way to return JSON using node or Express 复制的。我需要这种格式的回复。

响应 API 的示例格式

{
"success":true,
"code":200,
"message":"Ok",
"data": []
}

我按照上面问题中提供的所有方法进行操作,但仍然无法破解正确答案。由于我有很多 api,因此每个 api 都需要这种响应格式。

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization"
);
if (req.method === "OPTIONS") {
res.header("Access-Control-Allow-Methods", "POST, DELETE, GET");
return res.status(200).json({});
}
next();
});
app.use("/api", employeeRoutes);
app.use("/api", groupRoutes);

app.use((req, res, next) => {
const error = new Error("Not found");
error.status = 404;
next(error);
});

上面的代码片段是我的 app.js 文件的。我的路线代码看起来像这样。

exports.groups_Get_All = (req, res, next) => {
Group.find()
.exec()
.then(docs => {
const response =
docs.map(doc => {
return {
gname: doc.gname,
employee: doc.employeeId,
_id: doc._id,
createdAt: doc.createdAt
};
})
res.send((response));
})
.catch(err => {
console.log(err);
res.status(500).json({
error: err
});
});
};

现在我得到的只是 json 格式的纯数据的响应。

[
{
"gname": "wordpres",
"employee": [
"5c6568102773231f0ac75303"
],
"_id": "5c66b6453f04442603151887",
"createdAt": "2019-02-15T12:53:25.699Z"
},
{
"gname": "wordpress",
"employee": [
"5c6568102773231f0ac75303"
],
"_id": "5c66cbcf1850402958e1793f",
"createdAt": "2019-02-15T14:25:19.488Z"
}
]

现在我的问题是如何对每个 api(全局范围)实现此示例格式响应?

最佳答案

如果您使用的是 Express,请不要从 Controller 发送消息。制作一个中间件,其主要目的是将响应发送到客户端。这将使您能够设置对客户端的一致响应的格式。

例如,我制作了这样的响应中间件:-

module.exports = function(req, res, next) {
const message = {};
message.body = req.responseObject;
message.success = true;
message.status = req.responseStatus || 200;
res.status(message.status).send(message);
return next();
};

上面的代码将生成这样的格式。

{
"success": true,
"status": 200,
"body": {
"name": "rahul"
}
}

您可以使用express的request uplifter属性。您可以从以前的中间件添加responseObject和responseStatus。

同样,在单独的中间件中也可能会出现错误。

您可以在 route 通过此调用:-

const responseSender = require('./../middleware/responseSender');
/* your rest middleware. and put responseSender middleware to the last.*/
router.get('/',/* Your middlewares */, responseSender);

您可以通过以下方式调用它:-

exports.groups_Get_All = (req, res, next) => {
Group.find()
.exec()
.then(docs => {
const response =
docs.map(doc => {
return {
gname: doc.gname,
employee: doc.employeeId,
_id: doc._id,
createdAt: doc.createdAt
};
})

req.responseObject = response; // This will suffice
return next()
})
.catch(next);
}

关于javascript - 使用node或express返回json格式的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54744128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com