[英]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.