情景&建议的代码
有多个端点共享相似的逻辑(即执行常见任务)。
let express = require('express');
let router = express.Router();
router.post('/test1', function(req, res) {
asyncFunction(something1, function(result) {
var userId = result;
... some task
});
};
router.post('/test2', function(req, res) {
asyncFunction(something1, function(result) {
var userId = result;
... some task
});
};
router.post('/test3', function(req, res) {
asyncFunction(something1, function(result) {
var userId = result;
... some task
});
}
由于不同的端点需要执行类似的任务(包括异步调用),我认为可以在全局范围内创建一个函数,并回调结果并在最后响应。 所以,就是这样:
let express = require('express');
let router = express.Router();
router.post('/test1', function(req, res) {
asyncFunction(something1, function(result) {
var userId = result;
test123Function(userId, something, function(rst) {...})
});
};
router.post('/test2', function(req, res) {
asyncFunction(something2, function(result) {
var userId = result;
test123Function(userId, something, function(rst) {...})
});
};
router.post('/test3', function(req, res) {
asyncFunction(something1, function(result) {
var userId = result;
test123Function(userId, something, function(rst) {...})
});
}
test123Function(userId, parameter, callback) {
...
}
问题
但是,我知道在全球空间做一些事情是不好的做法,而且,当我使用上述结构时,我担心并发问题。 (例如,当数百人同时访问test1,或者多人同时访问test1和test2或test3时,响应可能会混淆。)
我知道每个req都是唯一的,因此我可以在req中保存一些变量以避免上述问题,但我无法从全局空间中的函数访问req(具体来说,当我想使用一个函数来处理时)像上面这样的类似任务)。我也听说过会议,但我不确定处理这种情况是否是正确的概念。