首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个javascript对象修改是如何工作的?我不明白范围,它不坚持

这个javascript对象修改是如何工作的?我不明白范围,它不坚持
EN

Stack Overflow用户
提问于 2017-03-26 12:01:19
回答 1查看 53关注 0票数 1

我使用的是Express、Node.js和Mongo。为了减少噪音,我从实际代码中简化了一些代码,我希望这是有意义的。

我的基本问题是,我正在修改一个对象,并且我期望数据更改在客户机-服务器调用中持续存在,但事实并非如此。注释解释了更多。

代码语言:javascript
复制
// server side routes.js

var LM = require('./modules/login-manager'); // database accessing functions
var DM = require('./modules/data-manager'); // database accessing functions

module.exports = function (app) {

  app.post('/', function (req, res) {
    // LM.manualLogin does a MongoDB call that looks fine, returns the expected data
    LM.manualLogin(req.body['user'], req.body['pass'], function (e, o) {
      if (!o) {
        res.status(400).send(e);
      } else {
        req.session.user = o;
        // calculateRank adds arbitrary fields to the user object
        // this change persists to POST /dashboard
        calculateRank(req.session.user);
        // DM.getListOfData() does a Mongo DB call that looks fine
        // and returns the expected data in o
        DM.getListOfData(function (e, o) {
          if (!o) {
            res.status(400).send(e);
          } else {
            // availableData doesn't already exist. This assignment
            // operation looks good
            // in the debugger, but "availableData" is NOT in the 
            // req.session when we get to POST /dashboard
            req.session.availableData = o;
          }
        });

        res.status(200).send(o);
      }
    });
  });

  app.get('/dashboard', function (req, res) {
    if (req.session.user == null) {
      res.redirect('/');
    }
    else {
      // "availableData" is not there!
      // but changes to req.session.user are
      res.render('dashboard', {
        user: req.session.user,
        data: req.session.availableData
      });
    }
  });
}

// client side
$('#login').ajaxForm({
  beforeSubmit: function (formData, jqForm, options) {
    formData.push({
      name: 'remember-me',
      value: $('.button-rememember-me-glyph').hasClass('glyphicon-ok')
    });
    return true;
  },
  success: function (responseText, status, xhr, $form) {
    if (status == 'success') window.location.href = '/dashboard';
  },
  error: function (e) {
    // login error
  }
});

因此,我单击驱动客户端ajax功能的登录按钮。服务器端,我得到POST /,当返回时,客户端重定向到/dashboard。问题是服务器端,在POST /dashboard中,我丢失了一些数据。我真正不明白的是,"req.session.user = o;“和"calculateRank(req.session.user)”设置的数据仍然存在。由"req.session.availableData = o;“设置的数据没有,在POST /dashboard中,就好像操作从未发生过一样(但其他两个操作却发生了)。调试该赋值操作时,它看起来很好,并且可以在req对象中看到数据。

有人能帮我解释一下吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-26 12:11:27

您正在发送响应,res.status(200).send(o);,在req.session.availableData = o;有时间运行之前,因为是异步操作

getListOfData回调中发送响应将解决问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43028432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档