我在服务器端代码中设置了此路由:
//Recieves facebook login info.
app.post("/login", function(req, res){
var request = req.body;
console.log("IN LOGIN + " + request);
var userInfo = {
"name":request.name
}
//Check if user already exists in database.
con.query("SELECT * FROM user",function(err,rows){
var existingUsers = rows;
for(var i = 0 ; i < existingUsers.length ; i ++){
if(existingUsers[i].name == userInfo.name){
console.log("USER exists");
break;
} else if (i < existingUsers.length-1){
con.query("INSERT INTO user SET ?",userInfo,function(err, res){
if(err){
console.log("**Error posting todos to database**");
throw err;
}
});
console.log("USER created");
break;
}
}
});
});
在我的服务器端代码的另一部分,我有这个:
passport.use(new FacebookStrategy({
clientID: 'xxxxx',
clientSecret: 'xxxxxxxxxxxxx',
callbackURL: 'http://www.localhost:3000/auth/facebook/todoPage'
},
function(accessToken, refreshToken, profile, done) {
var name = profile.displayName;
userSession = true;
done(null,profile);
}
));
如何将此名称发送到我的服务器端代码中的路径登录(因此我可以在路径中的 req 变量中访问它)我在客户端代码中将内容发送到路由的方式类似:
$.post("login", object, function (response){});
答案 0 :(得分:1)
首先,您不应该尝试在req参数中放置与请求无关的内容。
一个选项就是在你的应用程序中创建名称变量。
app.facebookName = "foo"
这不是非常模块化的,与全局变量没有太大区别。 但是,如果您将所有内容保存在同一个文件中(您不应该),那么这是一个选项。
另一个选择是将代码拆分到另一个文件中,并仅从中导出变量名称。
//facebook_profile.js
var facebookName = ""
module.exports = {
setName : function(name){
facebookName = name;
},
getName : function(){
return facebookName;
}
}
在app.js中,您可以在代码的两个不同部分中访问该名称。
var fbProfile = require("facebook_profile.js")
//Recieves facebook login info.
app.post("/login", function(req, res){
name = fbProfile.getName();
}
passport.use(new FacebookStrategy({
clientID: 'xxxxx',
clientSecret: 'xxxxxxxxxxxxx',
callbackURL: 'http://www.localhost:3000/auth/facebook/todoPage'
},
function(accessToken, refreshToken, profile, done) {
fbProfile.setName(profile.displayName);
userSession = true;
done(null,profile);
}
));
我还会继续尝试将整个passaport事件放在另一个文件中。