我有一堆发送 JSON 响应的路由器。我不想添加
{...,"timestamp": new Date()}
对每一个回复。以及其他属性,如 baseurl 等
最佳答案
就像在任何正常编码中一样,如果您想将通用操作应用于一堆方法,则创建一个共享函数并从所有这些方法调用该函数,而不是 res.json(...)
.
function sendJsonExtra(res, obj) {
obj.timestamp = Date.now();
obj.baseurl = ...
res.json(obj);
}
然后,只要在您想要将这组公共(public)属性添加到对象的任何地方,就可以使用此函数来代替 res.json()
。
您还可以使用中间件来将此函数作为方法添加到 res
对象中,这样您就可以根据需要调用 res.sendJsonExtra(obj)
结构更好。
// middleware to add `res.sendJsonExtra()` method to each request
// so other code can then call it as needed
function jsonExtra(req, res, next) {
res.sendJsonExtra = function(obj) {
obj.timestamp = Date.now();
obj.baseurl = ...
res.json(obj);
}
next();
}
router.use(jsonExtra);
然后,任何想要添加额外数据的路由处理程序都可以调用 res.sendJsonExtra(obj)
。这让每个路由处理程序决定是否要添加额外的属性,并且与猴子修补 res.json()
来改变其行为相比,它使代码更加 self 记录。
关于javascript - 如何为所有 res.json() 表达添加时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59939758/