我正在编写一个节点js express api应用程序,该应用程序在启动时需要在应用程序开始时进行几次ajax调用,并且它需要将此"全局"数据用于它收到的所有请求。
在我的应用程序.js开始时,我有
var users = require('./modules/users');
在我的用户.js中,我进行 ajax 调用来检索我的用户。
//ajax call 1
request.post({url:url1, formData: data}, function optionalCallback(err, httpResponse, body) {
//some code
and ajax call 2
request.get(url2, function(error, response, body) {
var response = JSON.parse(body);
var users = response.users;
// I want to make this users global and available in all routes
}).auth(null, null, true, access_token);
});
我的路线看起来像这样
router.post('/create', users.validate, function(req, res, next) {
// ...
}
和用户.js是我想访问用户列表的模块。
var users = {
validate: function () {
return function (req, res, next) {
// Global variable
var user_list; // This should be the response from the ajax requests
var user_id = req.query.user_id;
return user_list.indexOf(user_id) != -1
}
}
}
module.exports = users;
如何使users
全局化,以便我可以在每个路由中使用它?如果有其他更好的方法,请提出建议。
您可以创建用于存储用户信息的模块。您可以通过简单地使用 NodeJS 中的全局变量来实现该功能,但我喜欢这种方法,因为它是模块化的和可扩展的,用于检查和钩子开发线。
下面是一个简单的例子。
用户存储.js
var userData = null;
module.exports = {
setUserData : function (data){
userData = data;
},
getUserData : function (){
return userData;
}
};
在 AJAX 调用中,您可以根据需要执行以下操作来缓存模块中的存储数据:
用户.js
var userStore= require('./user-store');
ajaxCall()
.then((response) => {
var users = response.users;
userStore.setUserData(users);
});
要全局使用用户数据,可以导入user-store.js
并调用getUserData
函数。
无论您需要什么.js
var userStore= require('./user-store');
var userData = userStore.getUserData();
让我知道这种方法是否适合您。