更新相关对象时,我从同一代码中获得两种完全不同的行为。例如,一个问题属于学生。我在两台独立的机器上运行下面的代码。
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"
}
答案 0 :(得分:1)
您的packages.json指定一个包应该高于一个设置版本,因此您可以拥有一台机器,loopback
的版本为v2.23.0
,而v2.26.2
的版本为npm install
如果你在不同的时间运行npm list
,那么这是最新的。
您可以在两台计算机上运行npm update
以比较已安装的版本。
运行SELECT sum(price)
FROM (
select distinct userid FROM purchase
) u,
LATERAL (
SELECT price FROM purchase p
WHERE p.userid = u.userid
ORDER BY date DESC LIMIT 1
) x
更新软件包。
要更新package.json以使用最新的依赖项,请查看此answer。
答案 1 :(得分:1)
您没有检查question.student
中的错误。所以首先你需要解决这个问题。
然后,可能不完全相关,但question.student
很可能是异步的,因此您在next
完成之前调用question.student
。
更好的代码看起来像这样
Question.observe('after save', function (ctx, next) {
var question = ctx.instance
question.student(function (err, student) {
if (err) return next(err);
student.updateAttributes({points: student.points - question.points})
next();
});
});
此外,我对updateAttributes
一无所知,但如果它是异步的,您只需在完成后调用next()
(使用与{{1}相同的回调函数)例如),并检查错误。
始终检查错误。这不仅仅是一种很好的做法。