node.js - 如何存储用户操作数据?即用户 ID 日期/时间和操作代码
问题描述
操作代码是用户与之交互的任何页面
请参考下面的 javascript/nodejs 代码。
例如,在每个 router.get() 处,如果用户正在访问它,我需要存储他/她的用户 ID、日期时间和与每个路由器匹配的操作代码。
router.get('/', function(request, response) {
response.sendFile(path.join(__dirname + '/eventlist.html'));
});
router.get('/watchlist', function(request, response) {
response.sendFile(path.join(__dirname + '/watchlist.html'));
});
router.get('/search', function(request, response) {
response.sendFile(path.join(__dirname + '/search.html'));
});
app.post('/search', function(req,res){
let inputContent = req.body.srchterm;
var sequelize = require('./db');
sequelize.query('SELECT * FROM main_table WHERE jobname = :jobname OR jobstream = :jobstream OR workstation = :workstation ',
{ replacements: { jobname: inputContent, jobstream: inputContent, workstation: inputContent }, type: sequelize.QueryTypes.SELECT }
)
.then(function(searchib) {
console.log(searchib);
if (searchib == "") {
res.send(srcharray);
} else {
var srcharray = [];
searchib.forEach(function(items){
console.log('displaying srchadata');
srcharray.push ({workstation: items.workstation,
jobstream: items.jobstream,
jobdate: (items.jobdate.toLocaleString('en-GB', { timeZone: 'GMT'})),
jobname: items.jobname
});
console.log(srcharray);
});
// return response.json(srcharray);
res.send(srcharray);
}
});
});
app.use('/', router);
解决方案
创建您自己的中间件 ( storeUserActionDataMiddleware
) 来存储数据,如下所示:
function storeUserActionDataMiddleware(req, res, next) {
let data = {
userId: 42 /* get userId somehow */,
dateTime: new Date(),
actionCode: `${req.method} ${req.originalUrl}`,
};
console.log({ data });
// Store user action data here
// store(data);
// then execute routes
next();
}
如果您只想为特定路由器存储数据,请使用路由器顶部的中间件,例如:
// only specific router will store user action data
router.use(storeUserActionDataMiddleware);
router.get(/* ... */)
router.post(/* ... */)
或者,如果您想在应用程序范围内存储数据,请使用应用程序顶部的中间件,例如:
// all routes will store user action data
app.use(storeUserActionDataMiddleware);
app.use(/* ... */)
app.get(/* ... */)
app.post(/* ... */)
推荐阅读
- python - 下载适用于 Mac 的 Python 32 位
- swift - Firebase 分析已停用。未记录事件。未显示广告
- c - MPI基础图像处理——使用MPI进行卷积
- javascript - Angular 6计时器问题
- c++ - 未安装 QT C++ 模块
- swagger - 如何在 OpenAPI (Swagger) 中指定默认的 XML 元素文本?
- c - 在 curses 模式之外使用 getch 的便携性如何?
- c# - 使用 LINQ,为什么 Include() 在过去工作时不能有 lambda 表达式?
- python - “if”语句不适用于输入变量
- sql - 没有帐户凭据的 Azure 交叉订阅 SQL 备份