Вы должны учитывать эту информацию при структурировании вашей модели данных. Например. Допустим, вы пишете сообщения в коллекцию posts
и хотите добавить автора сообщения из коллекции authors
.
Теперь, самый простой способ сделать это - встроить эти данные непосредственно в ваш post
документ. Например. для создания данных мы используем insert , что-то вроде этого:
// posts.service.js
function save(postData, userData) {
// We return a Promise here
return db.posts.insert({
title: postData.title,
text: postData.text,
published: true,
// now comes your audit data
createdBy: user.username,
createdAt: new Date().toISOString(),
});
}
module.exports = { save };
Вы используете это так, т.е. в вашем контроллере API / posts:
// ... other stuff then:
const postsService = require('./posts.service');
route.post('/posts', function(req, res, next) {
postsService.save({
title: req.body.title,
text: req.body.text,
}, req.user)
// Handle response and error.
.then(response => res.json(response))
.catch(error => next(error));
А для обновления сообщения вы бы добавили его в posts.service.js
(используя update ):
// posts.service
// ...after your *save* function above
function update(postId, postData, userData) {
return db.posts.update({
id: postId,
}{
title: postData.title,
text: postData.text,
published: true,
// now comes your audit data
modifiedBy: user.username,
modifiedAt: new Date().toISOString(),
});
}
// update module exports:
module.exports = { save, update };
Теперь на вашем контроллере добавьте маршрут для обработки обновлений:
// ... after the creation route
route.put('/posts/:postId', function(req, res, next) {
postsService.update(req.params.postId, {
title: req.body.title,
text: req.body.text,
}, req.user)
// Handle response and error.
.then(response => res.json(response))
.catch(error => next(error));
Теперь другие способы сделать это могут означать, что вы включаете только ссылку (ObjectId) на тех, кто изменил данные. Или, может быть, больше информации.
Но разумнее и проще было бы использовать что-то вроде mongoose для обработки ваших данных, а затем использовать плагин, который делает все это автоматически. Примерно так: https://github.com/taptaptech/mongoose-audit.
Вы можете посмотреть что-то похожее на npm: https://www.npmjs.com/search?q=mongoose%20audit.
Что они делают, так это добавляют предварительно сохраненные хуки в ваши документы, и в этих хуках отслеживаются данные аудита. Таким образом, вы можете использовать что-то готовое, или вы можете посмотреть, что делают эти пакеты, и попытаться воспроизвести функциональность - лучше, если это хобби-проект, и вы хотите узнать, как все работает.
Теперь то, как вы показываете эту информацию в своем веб-интерфейсе, вероятно, подходит для нового вопроса, поскольку вы не указываете информацию о каком-либо программном обеспечении / пакетах, которые вы используете.