在javascript中调用客户端的服务器端变量

时间:2014-12-14 15:14:41

标签: javascript mongodb

我有一个javascript程序找到用户然后它在服务器端返回它的_id。是否有可能在客户端做同样的事情?或者在客户端调用服务器端变量而不使用jquery?这是我的代码:

router.post('/', function (req, res) {
var post = req.body;
var query = User.where({userName : post.username});
query.findOne(function(err, user){
    if (err) { return err}
    if (user) {
        user.isValidPassword(post.password, function(n, isMatch){
            if(isMatch) {
                req.session.user_id = user._id;
                res.redirect('/library?' + user._id);
            } else{

                res.redirect('/login');
            }
        });
    }else{
        res.redirect('/login');
        }
    });
});

我在客户端执行了一项功能,但我不知道为什么它只占用我的第一个用户

function find2(){
var User = model.users[0]._id;
console.log(User);
}

特别是我想在客户端调用变量user._id(如您所见,这是服务器端)。有办法吗?谢谢:))

2 个答案:

答案 0 :(得分:1)

好的......等等......如果我理解,你试图从路径中取一个参数,是不是?那么,在客户端你可以做类似的事情:

function find2(){
    var User = window.location.href;
    var type = User.substr(User.indexOf("?")+1, User.length);
    console.log(type);
}

对于像localhost:3000 / library这样的链接?dsds658dad,它打印的确是dsds658dad

答案 1 :(得分:0)

我不知道能够远程使用JS调用MongoDb,但是您可以使用服务器端JS(例如node.js),它将从MongoDb获取数据并作为JAX作为AJAX响应的一部分在客户端上返回

某些JS框架(例如meteor.js)可以隐藏这项工作。

这是我项目中的一个例子:

服务器端(node.js):

app.get('/api/info/:mode', function(req, res) {
  var mode = req.params.mode;
  console.log(mode);

  var process = function(err, questions) {
    if(!err) {
      var result = {};

      for (var i = 0; i < questions.length; i++) {

        if(result.hasOwnProperty(questions[i].metagroup)) {
          var dict = result[questions[i].metagroup];
          if(dict.hasOwnProperty(questions[i].group)) {
            dict[questions[i].group] += 1;
          } else {
            dict[questions[i].group] = 1;
          }
          // result[questions[i].metagroup] = dict;
        }
        else {
          var dict = {};
          dict[questions[i].group] = 1;
          result[questions[i].metagroup] = dict;
        }
      }

      return res.send({ status: 'OK', info: result });
    } else {
      res.statusCode = 500;
      log.error('Internal error(%d): %s', res.statusCode, err.message);
      return res.send({ error: 'Server error' });
    }
  };

  if (mode == 'all') {
    return QuestionModel.find(process);
  } else {
    return QuestionModel.find({ priority_group: 1 }).exec(process);
  };
});

客户端(angular.js):

var requestGroupList = function(mode) {
            return $http.get("https://myhost/api/info/"+ mode)
                        .then(function(response) {
                            return response.data;
                        });
        };