我正在尝试使用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。
答案 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
取决于登录状态。