Bookshelf注册表插件和节点循环依赖性错误
Bookshelf registry plugin and node cirrcular dependency errors
我尝试使用Bookshelf,但遇到了未定义的模型错误。因此,我尝试使用"注册表"插件,如中所述书架注册wiki。事实上,我在这个github问题中提到了错误。但这里只提到了注册表插件,节点循环依赖关系管理问题可能会导致这种情况。我在wiki中几乎完全复制了这个例子。
我的代码:
db.js
var client = require("knex");
var knex = client({
client: 'pg',
connection: {
host: '127.0.0.1',
user: 'postgres',
password: 'postgres',
database: 'hapi-todo'
},
pool: {
min: 2,
max: 10
},
debug: true
});
var Bookshelf = require('bookshelf')(knex);
Bookshelf.plugin('registry');
module.exports = Bookshelf;
user.js
var db = require("../models/db");
require("../todos/todo");
var User = db.Model.extend({
tableName: "users",
todos: function () {
return this.hasMany('Todo', "user_id");
}
});
module.exports = db.model("User", User);
todo.js
var db = require("../models/db");
require("../users/user");
var Todo = db.Model.extend({
tableName: "todos",
user: function () {
return this.belongsTo('User');
}
});
module.exports = db.model("Todo", Todo);
sample.js-作品
var Todo = require("./todos/todo")
Todo.collection().fetch().then(function(result) {
console.log(result);
});
此代码按预期运行并产生所需的结果。
sample.js
var Todo = require("./todos/todo")
Todo({
description: "Walk the dogs",
user_id: 1,
completed: false
}).save()
.then(function(todo) {
console.log(todo)
})
这导致:
/node_modules/bookshelf/lib/base/model.js:57
this.attributes = Object.create(null);
^
TypeError: Cannot set property 'attributes' of undefined
at ModelBase (/home/ubuntu/hapi-first/node_modules/bookshelf/lib/base/model.js:57:19)
at Child (/home/ubuntu/hapi-first/node_modules/bookshelf/lib/extend.js:15:12)
at Child (/home/ubuntu/hapi-first/node_modules/bookshelf/lib/extend.js:15:12)
at Child (/home/ubuntu/hapi-first/node_modules/bookshelf/lib/extend.js:15:12)
at Object.<anonymous> (/home/ubuntu/hapi-first/sample.js:3:1)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:141:18)
at node.js:933:3
我在这里做错了什么?我是不是错过了什么?(我对节点环境相当陌生)
问题与注册表插件无关。无论如何,它的使用允许您将require()
删除到user.js
和todo.js
上的相关模型。
修复方法只是在Todo
之前添加一个new
,因为您只能save()
一个实例:
new Todo({
description: "Walk the dogs",
user_id: 1,
completed: false
}).save().then(function(todo) {
console.dir(todo)
})
相关文章:
- jQuery:循环一个具有不同超时值的循环
- 在循环中分配json值时,值被覆盖
- 如何在下面的ES6循环中获得前面的文本
- 为什么“;未定义的“;在JavaScript中结束循环
- Javascript循环不会自我更新
- 如何使用jquery处理php循环通过元素
- 而循环只设置php中输入字段中的第一个值
- 循环遍历数组中的特定索引
- Javascript返回值只在循环中返回一次
- 按照选项卡索引的顺序循环一个jQuery选择
- 循环遍历以数组为值的Javascript对象
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 循环结束/推送到数组之前在页面上呈现EJS
- 循环比赛位置算法
- jQuery循环在特定位置暂停
- 我的javascript for循环不起作用
- 循环浏览多个身体背景图像
- Bookshelf注册表插件和节点循环依赖性错误
- 计算敲除的循环依赖性