为什么安装程序中的命令如此困难?

Lex van Buiten

我基于库中包含的node-orm2示例项目构建了一个node express应用。我遇到了一个讨厌的“虫”,我的返回值看上去一团糟。

一个“用户”只有一个“权限”:User.hasOne('permission', db.models.permission, {required: true, autoFetch: true});一个“公司”只有一个所有者,但是这是相反的,因此“用户”有多个“公司”。Company.hasOne('user', db.models.user, { required: true, reverse: 'companies', autoFetch: true});

首次设置:

function setup(db, cb) {
 require('./company')(orm, db);
 require('./user')(orm, db);
 require('./permission')(orm, db);

 return cb(null, db);
}

混乱的结果:

{
  "id": 1,
  "username": "l.vanbuiten",
  "name": "Lex",
  "surname": "van Buiten",
  "age": "1992-05-13T22:00:00.000Z",
  "createdAt": "2015-12-21T23:25:04.000Z",
  "permission": {
    "id": 1,
    "username": "l.vanbuiten",
    "name": "Lex",
    "surname": "van Buiten",
    "age": "1992-05-13T22:00:00.000Z",
    "createdAt": "2015-12-21T23:25:04.000Z",
    "permission_id": 1
  },
  "companies": []
}

交换这些设置行后,事情如我所愿:

应该如何:

function setup(db, cb) {
 require('./permission')(orm, db);
 require('./user')(orm, db);
 require('./company')(orm, db);

 return cb(null, db);
}

所需结果

{
  "id": 1,
  "username": "l.vanbuiten",
  "name": "Lex",
  "surname": "van Buiten",
  "age": "1992-05-13T22:00:00.000Z",
  "createdAt": "2015-12-21T23:25:04.000Z",
  "permission": {
    "id": 1,
    "name": "permission name"
  },
  "companies": [
    {
      "id": 1,
      "name": "company name",
      "description": "company description",
      "createdAt": "2015-12-21T23:25:25.000Z"
    }
  ]
}

一个示例模型:

var moment = require('moment');

module.exports = function (orm, db) {
var Company = db.define('company', {
    id:             {type: 'serial', key: true},
    name:           {type: 'text', required: true, unique: true},
    description:    {type: 'text', big: true},
    createdAt:  {type: 'date', required: true, time: true}
},
{
    cache: false,
    hooks: {
        beforeValidation: function () {
            this.createdAt = new Date();
        }
    },
    validations: {
        name: [
            orm.enforce.unique("Company already exist"),
            orm.enforce.ranges.length(1, undefined, "Company name cannot be empty"),
            orm.enforce.ranges.length(undefined, 50, "Company name is to long")
        ]
    },
    methods: {
        serialize: function () {
            return {
                id: this.id,
                name: this.name,
                description: this.description,
                createdAt: this.createdAt
            }
        }
    }
});
Company.hasOne('user', db.models.user, { required: true, reverse: 'companies', autoFetch: true});
};

订单相差这么多怎么办?

罗伯特克莱普

(免责声明:我node-orm2经验不足)

在我看来,您建立关联的方式正在引起您的问题。

在第一个设置中,定义模型和关联的顺序如下:

  • 创建Company模型
  • 创造之间的联系Company,并User通过db.models.user(这还不存在!)
  • 创建User模型
  • 等等。

相反,我认为您必须等到所有模型都定义好后才能创建关联:

function setup(db, cb) {
  // Create models.
  var Permission = require('./permission')(orm, db);
  var User       = require('./user')(orm, db);
  var Company    = require('./company')(orm, db);

  // Create associations.
  Company.hasOne('user', User, { required: true, reverse: 'companies', autoFetch: true});
  ...

  // Return.
  return cb(null, db);
}

(这也假设每个所需模型文件中的导出函数都返回模型,例如return Company在的末尾company.js)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在Debian中设置WLAN如此困难?(与Ubuntu相比)

来自分类Dev

为什么阻止DDoS如此困难?

来自分类Dev

为什么在linux中安装新应用程序是如此复杂..?

来自分类Dev

为什么在Ubuntu上设置Ruby on Rails如此困难?

来自分类Dev

为什么从发布版本中排除XML文档如此困难?

来自分类Dev

为什么在Ubuntu中安装软件比在Windows中安装软件困难?

来自分类Dev

为什么pystan安装如此缓慢?

来自分类Dev

为什么该程序运行如此缓慢?

来自分类Dev

为什么在MongoDB中对索引项进行“区别”和“计数”命令的速度如此之慢?

来自分类Dev

为什么在控制器上下文之外获取路由值如此困难?

来自分类Dev

为什么 Lua 中的 == 表现如此?

来自分类Dev

为什么zip和rm命令之间的通配符*如此不同?

来自分类Dev

为什么我传递参数时调度程序的行为如此?

来自分类Dev

为什么Flash应用程序如此缓慢/疯狂?

来自分类Dev

为什么Flash应用程序如此缓慢/疯狂?

来自分类Dev

为什么在Windows上卸载程序如此缓慢?

来自分类Dev

为什么用cocos2d-x在白色背景图层上绘制红色矩形Sprite如此困难?

来自分类Dev

为什么用cocos2d-x在白色背景图层上绘制红色矩形Sprite如此困难?

来自分类Dev

React中的派生状态是什么,为什么如此重要?

来自分类Dev

为什么要直接将程序安装到C:/中?

来自分类Dev

为什么Math.max在Java中如此昂贵?

来自分类Dev

为什么Haskell(GHC)中的多态性如此昂贵?

来自分类Dev

为什么在Scala Option中如此创建单个元素列表?

来自分类Dev

为什么在c中以如此奇怪的顺序执行代码?

来自分类Dev

调用方法的顺序-在此示例中为什么如此重要?

来自分类Dev

为什么在TestNG中此测试的执行顺序如此?

来自分类Dev

为什么堆栈和堆在内存中如此分离?

来自分类Dev

为什么在Rust中堆栈值相差如此远?

来自分类Dev

为什么YouTube的缓冲/加载行为在Chrome中如此可怕?

Related 相关文章

  1. 1

    为什么在Debian中设置WLAN如此困难?(与Ubuntu相比)

  2. 2

    为什么阻止DDoS如此困难?

  3. 3

    为什么在linux中安装新应用程序是如此复杂..?

  4. 4

    为什么在Ubuntu上设置Ruby on Rails如此困难?

  5. 5

    为什么从发布版本中排除XML文档如此困难?

  6. 6

    为什么在Ubuntu中安装软件比在Windows中安装软件困难?

  7. 7

    为什么pystan安装如此缓慢?

  8. 8

    为什么该程序运行如此缓慢?

  9. 9

    为什么在MongoDB中对索引项进行“区别”和“计数”命令的速度如此之慢?

  10. 10

    为什么在控制器上下文之外获取路由值如此困难?

  11. 11

    为什么 Lua 中的 == 表现如此?

  12. 12

    为什么zip和rm命令之间的通配符*如此不同?

  13. 13

    为什么我传递参数时调度程序的行为如此?

  14. 14

    为什么Flash应用程序如此缓慢/疯狂?

  15. 15

    为什么Flash应用程序如此缓慢/疯狂?

  16. 16

    为什么在Windows上卸载程序如此缓慢?

  17. 17

    为什么用cocos2d-x在白色背景图层上绘制红色矩形Sprite如此困难?

  18. 18

    为什么用cocos2d-x在白色背景图层上绘制红色矩形Sprite如此困难?

  19. 19

    React中的派生状态是什么,为什么如此重要?

  20. 20

    为什么要直接将程序安装到C:/中?

  21. 21

    为什么Math.max在Java中如此昂贵?

  22. 22

    为什么Haskell(GHC)中的多态性如此昂贵?

  23. 23

    为什么在Scala Option中如此创建单个元素列表?

  24. 24

    为什么在c中以如此奇怪的顺序执行代码?

  25. 25

    调用方法的顺序-在此示例中为什么如此重要?

  26. 26

    为什么在TestNG中此测试的执行顺序如此?

  27. 27

    为什么堆栈和堆在内存中如此分离?

  28. 28

    为什么在Rust中堆栈值相差如此远?

  29. 29

    为什么YouTube的缓冲/加载行为在Chrome中如此可怕?

热门标签

归档