簡體   English   中英

如何設置可在所有路由express / node.js中訪問的全局變量

[英]How do I set a global variable accessible throughout all routes express/node.js

我已經開始使用nodejs和express了,我在后端數據庫中使用了Parse API。

當前我在頁面加載中有一個ajax發布到我的路由器/ getuser之一,如果它們已登錄,它將獲取當前用戶。

我想知道實現此目的的最佳方法是什么,以便可以跨所有路徑訪問用戶變量,我是否應該這樣做?

我基本上希望能夠在整個應用程序中訪問用戶。

index.js路由

var express = require('express');
var router = express.Router();
Parse = require('parse').Parse;


/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'hello'});

});


//GET USER
router.post('/getuser',function(req,res){
if(req.body.name != null){
username = req.body.name;
loggedIn = true;
res.send(JSON.stringify(username));
}
else{
 loggedIn = false;
}

});

module.exports = router;

scripts.js客戶端Ajax頁面加載

   Parse.initialize("xxxxx","xxxxxx");

      var data = {};
      data.name = Parse.User.current().get("username");

            $.ajax({
              url: "/getuser",
              type: "post",
              dataType: "json",
              data: JSON.stringify(data),
              contentType: "application/json",
              cache: false,
              timeout: 5000,
              complete: function() {

              },

              success: function(data) {

                console.log("success" + JSON.stringify(data))

             },

              error: function(data) {
                console.log("error" + JSON.stringify(data))
              },
            });

我應該將其發布到我的app.js並在那里設置全局變量嗎? 如何在所有路線上訪問該變量? 我什至會發布到app.js。

有多種模式可以共享所有路線上的信息。 在您的情況下,您似乎要與所有路由共享登錄的用戶詳細信息。 為此,我會做類似的事情。

將登錄的用戶保存到會話中

如果您使用express-session則有req.session可用。 登錄完成后,您可以將登錄的uid保存到req.session

將已登錄的用戶注入路由

在您的頂級路線中,您可以執行以下操作-

app.use(function(req,res,next){
   if(req.session.uid){
        //find the user via models , just an example, it should be async
        var user = require('models').findUser(req.session.uid);

        //inject to req object
        req.currentUser = user;

        //all the routes after this will have currentUser in the req
        next();
   } else {
      //no user is logged in
      console.log("Using empty user");

      req.currentUser = null;

      next();
   }
});

因此,此后的所有路由都將具有currentUser具體取決於登錄狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM