更新了 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中

SpringMVC:取决于 url 扩展的不一致映射行为

垂直 ViewPager 和 Android Pie 与滑动手势不一致的行为

loopback安装记