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@Overdrivrnpm列表
用于所有依赖项(我刚刚选择环回作为示例,因为它们都是以相同的方式指定的。感谢您的评论,我已添加到答案中。