在 Rest API returns 之后用 MongoDB 做一些操作可以吗
Is it OK to do some operation with MongoDB after the Rest API returns
我想请教一下。在我的 nodeJS/Mongo 堆栈中,
我的一个 Rest API 需要时间 return 因为它在 return 结果之前进行操作链。但对于某些操作,我并不关心 return 状态是否相同。所以我的问题是,REST API 在完成所有操作之前 return 结果是否可以,而不是只等待主要操作。
我的原代码是这样的
router.post('/updateStatus’, validateToken, function(req, res) {
if (req.body.hasOwnProperty(‘param1’) && req.body.hasOwnProperty(‘param2’) ) {
statusCollection.updateStatus(req.body.param1, req.body.param2,function (err, out) {
reportCollection.updateReport(req.body.param1, req.body.param2,function (err, out) {
var result = {status:200, data:out};
res.json(result);
} );
} );
} else {
res.status(422);
res.json({error:'Missing required params'});
}
});
我想更改为:
router.post('/updateStatus’, validateToken, function(req, res) {
if (req.body.hasOwnProperty(‘param1’) && req.body.hasOwnProperty(‘param2’) ) {
statusCollection.updateStatus(req.body.param1, req.body.param2,function (err, out) {
var result = {status:200, data:out};
res.json(result);
//***************Will continue in After returning API ********************
reportCollection.updateReport(req.body.param1, req.body.param2,function (err, out) {} );
} );
} else {
res.status(422);
res.json({error:'Missing required params'});
}
});
即,我将 return 在 statusCollection.updateStatus() 之后得到结果,而不是等到 reportCollection.updateReport()。这样可以吗?
有时,您可能会进行繁重的操作,在这种情况下,您不能总是等待,然后再将结果返回给客户端。
因此,您必须考虑客户端需要什么以及可以在后台完成哪些不会影响客户端的操作。
当您发现这一点时,您可以拆分任务并使用作业或其他策略来委派必须在后台完成的代码并减少响应时间。
有时,如果客户端需要该操作的结果是最新的,您可以在完成大量操作后使用 websocket 或拉取来更新客户端。
分离计算是一种常见的策略,对我来说不会出现错误。
我想请教一下。在我的 nodeJS/Mongo 堆栈中, 我的一个 Rest API 需要时间 return 因为它在 return 结果之前进行操作链。但对于某些操作,我并不关心 return 状态是否相同。所以我的问题是,REST API 在完成所有操作之前 return 结果是否可以,而不是只等待主要操作。
我的原代码是这样的
router.post('/updateStatus’, validateToken, function(req, res) {
if (req.body.hasOwnProperty(‘param1’) && req.body.hasOwnProperty(‘param2’) ) {
statusCollection.updateStatus(req.body.param1, req.body.param2,function (err, out) {
reportCollection.updateReport(req.body.param1, req.body.param2,function (err, out) {
var result = {status:200, data:out};
res.json(result);
} );
} );
} else {
res.status(422);
res.json({error:'Missing required params'});
}
});
我想更改为:
router.post('/updateStatus’, validateToken, function(req, res) {
if (req.body.hasOwnProperty(‘param1’) && req.body.hasOwnProperty(‘param2’) ) {
statusCollection.updateStatus(req.body.param1, req.body.param2,function (err, out) {
var result = {status:200, data:out};
res.json(result);
//***************Will continue in After returning API ********************
reportCollection.updateReport(req.body.param1, req.body.param2,function (err, out) {} );
} );
} else {
res.status(422);
res.json({error:'Missing required params'});
}
});
即,我将 return 在 statusCollection.updateStatus() 之后得到结果,而不是等到 reportCollection.updateReport()。这样可以吗?
有时,您可能会进行繁重的操作,在这种情况下,您不能总是等待,然后再将结果返回给客户端。
因此,您必须考虑客户端需要什么以及可以在后台完成哪些不会影响客户端的操作。
当您发现这一点时,您可以拆分任务并使用作业或其他策略来委派必须在后台完成的代码并减少响应时间。
有时,如果客户端需要该操作的结果是最新的,您可以在完成大量操作后使用 websocket 或拉取来更新客户端。
分离计算是一种常见的策略,对我来说不会出现错误。