Node.js 环回中更新的相关对象行为不一致

Node.js 环回中更新的相关对象行为不一致,node.js,loopbackjs,strongloop,Node.js,Loopbackjs,Strongloop,当更新相关对象时,我从同一代码中获得两种完全不同的行为。例如,一个问题属于一个学生。我在两台不同的机器上运行下面的代码 Question.observe('after save', function (ctx, next) { var question = ctx.instance question.student(function (err, student) { student.updateAttributes({points: student.points -

当更新相关对象时,我从同一代码中获得两种完全不同的行为。例如,一个问题属于一个学生。我在两台不同的机器上运行下面的代码

Question.observe('after save', function (ctx, next) {

   var question = ctx.instance

   question.student(function (err, student) {
      student.updateAttributes({points: student.points - question.points})
   })

next();

})
在第一台机器上,它工作得很好。所以我想我完了。但是,当我在不同的机器上运行相同的代码时,我会得到以下错误:

  student.updateAttributes({points: student.points - question.points})
                                           ^
  TypeError: Cannot read property 'points' of null
我正在使用内存连接器

  "db": {
     "name": "db",
     "connector": "memory",
   }
我唯一想到的是我有两个不同版本的环回(一个有bug,另一个没有)。。。但是,package.json对这两种格式也完全相同

{
  "name": "foo",
  "version": "1.0.0",
  "main": "server/server.js",
  "scripts": {
    "start": "node .",
    "pretest": "jshint .",
    "test": "mocha"

  },
  "dependencies": {
    "compression": "^1.0.3",
    "cors": "^2.5.2",
    "loopback": "^2.22.0",
    "loopback-boot": "^2.6.5",
    "loopback-component-explorer": "^2.1.0",
    "loopback-datasource-juggler": "^2.39.0",
    "serve-favicon": "^2.0.1"
  },
  "devDependencies": {
    "chakram": "^1.2.1",
    "jshint": "^2.8.0",
    "loopback-testing": "^1.2.0",
    "mocha": "^2.3.4",
    "mocha-bamboo-reporter": "^1.1.0"
  },
  "repository": {
    "type": "",
    "url": ""
  },
  "description": "foo"
}

Your packages.json指定一个包应该高于设置的版本,因此如果您在不同的时间运行
npm install
,那么您可以拥有一台
loopback
版本为
v2.23.0
的机器,以及一台位于
v2.26.2
(当前最新版本)的机器

您可以在两台计算机上运行
npm list
,以比较安装的版本

运行
npm update
更新包


要更新您的package.json以使用最新的依赖项,请查看此项。

您没有在
问题中检查错误。student
。所以首先你需要解决这个问题

然后,可能不完全相关,但
问题。student
很可能是异步的,所以您在
问题完成之前调用
next

更好的代码应该是这样的
问题。观察('after save',函数(ctx,next){
var question=ctx.instance
问题.学生(函数(错误,学生){
if(err)返回next(err);
student.updateAttributes({points:student.points-question.points})
next();
});

});
也许他可以运行
npm loopback-v
来检查loopback@Overdrivr
npm列表
用于所有依赖项(我刚刚选择环回作为示例,因为它们都是以相同的方式指定的。感谢您的评论,我已添加到答案中。