表达中间件以一致地格式化响应



我正试图决定一个一致的响应JSON结构,我找到了这个SO答案。

我喜欢JSend的简单性,但现在我想知道在express中实现该结构的干净方法是什么,而不必手动创建每个响应或在每个控制器方法中使用构造函数来帮助构建该结构。我找到了jsend express npm,但它的下载量太少了,我担心会依赖它

有人能推荐一些方法来自动在expression myself中强制执行这些结构吗?

然而,我不知道为什么status密钥是必要的,因为这三个状态似乎已经被HTTP状态覆盖了,而且我在谷歌的风格指南中没有看到推荐的这个密钥,所以这也是我可能不想使用jsend包的另一个原因,我只想自己省略一些密钥,然后在需要时添加。

基于这个SO答案,我就是这样做的。

我有一个catch-all错误处理程序,它添加了error键,但对于所有非错误,我希望将数据封装在data键中,而不必在每个控制器方法中手动执行,或者在res.json之前调用每个控制器方法的另一个函数,因为这也是重复的。

/**
* Nests all successful res data in a `data` key. Any additional meta-data
* that needs to be present at the top level json object can be added here.
* @param {request} _req
* @param {response} res
*/
const modifyResponseBody = (_req, res, next) => {
const resDotJson = res.json;
res.json = function (data) {
const isError = data?.hasOwnProperty?.("error") === true;
if (!isError) {
arguments[0] = { data: data };
}
resDotJson.apply(res, arguments);
};
next();
};
app.use(modifyResponseBody);

最新更新