2016-04-19 5 views
3

Ich habe versucht, Bücherregal zu verwenden, aber mit undefinierten Modellen Fehler stecken geblieben. Also habe ich versucht, das "Registry" -Plugin zu verwenden, wie in bookshelf registry wiki beschrieben. Ich habe tatsächlich Fehler in dieser github issue erwähnt. Aber es gibt nur einen Verweis auf Registry-Plugin und das Knoten zirkuläre Abhängigkeitsverwaltung Probleme können dazu führen, dass es. Ich habe fast genau das Beispiel im Wiki geknüpft.Bookshelf Registry-Plugin und Knoten Cirrular Abhängigkeitsfehler

Mein Code:

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 - arbeitet

Dieser Code läuft wie erwartet und erzeugt die gewünschten Ergebnisse.

Sample.js

var Todo = require("./todos/todo") 

Todo({ 
    description: "Walk the dogs", 
    user_id: 1, 
    completed: false 
}).save() 
.then(function(todo) { 
    console.log(todo) 
}) 

dies ergibt:

/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 

Was mache ich hier falsch? Vermisse ich etwas? (Ich bin ziemlich neu in der Knotenumgebung)

Antwort

2

Das Problem hängt nicht mit dem Registry-Plugin zusammen. Anyway seine Verwendung ermöglicht es Ihnen, die require() zu den verwandten Modellen auf user.js und todo.js zu entfernen.

Das Update einfach ist das Hinzufügen einer new vor Todo, da kann man nur save() eine Instanz:

new Todo({ 
    description: "Walk the dogs", 
    user_id: 1, 
    completed: false 
}).save().then(function(todo) { 
    console.dir(todo) 
}) 
+1

Danke, ich dachte, dass ich etwas trivial und hier gehen zu verpassen hatten wir ... –

Verwandte Themen