Как добавить временную метку ко всем разрешениям. json () express - PullRequest
0 голосов
/ 28 января 2020

У меня есть несколько маршрутизаторов, которые отправляют ответ JSON. Я не хочу добавлять

{...,"timestamp": new Date()}

к каждому ответу. Наряду с другими свойствами, такими как baseurl и др. c

Ответы [ 2 ]

2 голосов
/ 28 января 2020

Как и в любом обычном кодировании, если вы хотите применить общую операцию к группе методов, то создайте общую функцию и вызовите эту функцию из всех этих методов вместо res.json(...).

function sendJsonExtra(res, obj) {
    obj.timestamp = Date.now();
    obj.baseurl = ...
    res.json(obj);    
}

Затем просто используйте эту функцию вместо res.json() везде, где вы хотите, чтобы этот набор общих свойств был добавлен к вашему объекту.

У вас также может быть промежуточное ПО, которое добавит эту функцию в качестве метода к res object, чтобы вы могли затем просто позвонить 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() для изменения его поведения.

0 голосов
/ 28 января 2020

По общему признанию, это было давно, так как я работал в NodeJS, так что возьмите это с крошкой соли - но, возможно, что-то подобное будет работать. Он должен позволять ничего не менять в нисходящем направлении - он не идеален, так как портит объект ответа, но это компромисс, который вы должны оценить сами.

app.use((req, res, next) => {
  res._json = res.json;
  res.json = function(obj) {
    // add your fields to obj
    obj.timestamp = new Date();
    // ...
    res._json(obj);
  }
  next();
})

app.use(/* your processing code */);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...