gpt4 book ai didi

javascript - 使 ajax 响应全局并可在所有路由中使用

转载 作者:行者123 更新时间:2023-12-03 02:23:19 25 4
gpt4 key购买 nike

我正在编写一个 Node js Express api 应用程序,该应用程序启动时需要在应用程序的开头进行几次 ajax 调用,并且需要对收到的所有请求使用此“全局”数据。

在我的 app.js 的开头,我有

var users = require('./modules/users');

在我的 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) {
// ...
}

users.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 中使用全局变量来实现该功能,但我喜欢这种方法,因为它是模块化且可扩展的,可用于检查和 Hook 开发线。

下面是一个简单的例子。

user-store.js

var userData = null;

module.exports = {
setUserData : function (data){
userData = data;
},
getUserData : function (){
return userData;
}
};

在 AJAX 调用中,您可以根据需要执行以下操作来缓存模块中的数据存储:

users.js

var userStore= require('./user-store');

ajaxCall()
.then((response) => {
var users = response.users;
userStore.setUserData(users);
});

要全局使用用户数据,可以导入user-store.js并调用getUserData函数。

wherever-you-need.js

var userStore= require('./user-store');
var userData = userStore.getUserData();

请告诉我这种方法是否适合您。

关于javascript - 使 ajax 响应全局并可在所有路由中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49061315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com