如何在所有路由express / node.js中设置可访问的全局变量

时间:2015-08-24 05:55:17

标签: javascript ajax node.js express parse-platform

我正在尝试使用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。

1 个答案:

答案 0 :(得分:0)

有多种模式可以在所有路线上共享信息。在您的情况下,您似乎希望与所有路由共享登录的用户详细信息。为此我会做那样的事情。

将登录用户保存到会话

如果您使用的是req.session,则express-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取决于登录状态。