发布在服务器端代码

时间:2016-01-11 23:38:48

标签: javascript node.js express

我在服务器端代码中设置了此路由:

//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){});

1 个答案:

答案 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事件放在另一个文件中。