更新了 Loopback 中行为不一致的相关对象
Posted
技术标签:
【中文标题】更新了 Loopback 中行为不一致的相关对象【英文标题】:Updated related objects in Loopback behaving inconsisently 【发布时间】:2016-04-10 03:19:30 【问题描述】:更新相关对象时,我从同一代码中得到两种完全不同的行为。例如,问题属于学生。我在两台不同的机器上运行下面的代码。
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",
我唯一想到的是我有两个不同版本的环回(一个有错误,另一个没有)......但是 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"
【问题讨论】:
【参考方案1】:您没有检查question.student
中的错误。所以首先你需要解决这个问题。
那么,可能不完全相关,但question.student
很可能是异步的,所以你在question.student
完成之前调用next
。
更好的代码应该是这样的
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()
(例如,使用您为question.student
所做的回调函数),并且也检查错误。
始终检查错误。这不仅仅是一个好习惯。
【讨论】:
【参考方案2】:您的 packages.json 指定一个包应该高于设定的版本,因此您可以拥有一台机器,其中loopback
的版本为v2.23.0
,另一台为v2.26.2
(当前最新),如果您在不同的时间运行npm install
。
您可以在两台机器上运行npm list
来比较安装的版本。
运行npm update
更新软件包。
要更新您的 package.json 以使用最新的依赖项,请查看此answer。
【讨论】:
也许他可以运行npm loopback -v
来检查环回的版本
@Overdrivr npm list
对于所有依赖项(我只是选择了环回作为示例,因为它们都以相同的方式指定。感谢您的评论,已添加到答案中。以上是关于更新了 Loopback 中行为不一致的相关对象的主要内容,如果未能解决你的问题,请参考以下文章
从 sqlite3 数据库上的表单提交中的 sqlalchemy 行更新行为不一致
PySide:QSettings 作为类变量具有不一致的行为
使用jdbc更新数据后,hibernate 缓存对象不更新,与数据库不一致,同一个session中