在Node.js中设置模型的正确方法

我正在构build一个小型的Node / Express应用程序,并且已经使用postgresql适配器设置了Knex。 这一切工作。 我知道它的工作原理,因为我可以做一个SQL查询,结果是我想要的 – 特定表中的行。 但是我试图build立模型,以便我可以引入相关数据并进行validation。 我为此使用书架。

我已经build立了这样的模型:

base.js

var knex = require('../../config/db'); var bookshelf = require('bookshelf')(knex); bookshelf.plugin('registry'); module.exports = bookshelf; 

food.js

 var bookshelf = require('./base'); var Meal = require('./meal'); var Food = bookshelf.Model.extend({ tableName: 'foods', meal: function() { return this.belongsTo(Meal); } }); module.exports = bookshelf.model('Food', Food); 

meal.js

 var bookshelf = require('./base'); var Day = require('./day'); var Food = require('./food'); var Meal = bookshelf.Model.extend({ tableName: 'meals', foods: function() { return this.hasMany(Food); }, day: function() { return this.belongsTo(Day); } }); module.exports = bookshelf.model('Meal', Meal); 

day.js

 var bookshelf = require('./base'); var Meal = require('./meal'); var Day = bookshelf.Model.extend({ tableName: 'days', meals: function() { return this.hasMany(Meal); } }); module.exports = bookshelf.model('Day', Day); 

问题是,当我需要在路由器模型,我得到一个NotFoundError是这样的:

 model: { [Function] NotFoundError: [Function: ErrorCtor], NoRowsUpdatedError: [Function: ErrorCtor], NoRowsDeletedError: [Function: ErrorCtor] } 

我试图检索像这样的数据库结果:

 var Meal = require('../models/meal'); var meals = Meal.fetchAll().then(function(collection) { return collection; }); ... 

为什么这不返回任何东西? 这看起来像文档build议的。

我哪里错了? 我猜这是因为没有正确设置书架或要求模型。

有什么build议?

这个调用fetchAll的一个原因是没有返回任何东西,可能是因为数据库查询是asynchronous的。 如果你想在你的代码中使用可变的饭菜,它可能仍然是未定义的。 你应该把剩下的需要这个集合的代码放在.thencallback中,或者放在一个新的.thencallback中,以便它能够访问查询的数据。