首页 > 解决方案 > 如何存储用户操作数据?即用户 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);

标签: node.jsjsonexpress

解决方案


创建您自己的中间件 ( 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(/* ... */)

推荐阅读