使 ajax 响应全局化并可用于所有路由



我正在编写一个节点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();

让我知道这种方法是否适合您。

最新更新