Я создаю небольшое приложение Node/Express, и я установил Knex с адаптером postgresql. Это все работает. Я знаю, что это работает, потому что я могу выполнить sql-запрос, и результаты - это то, что я хочу - строки из конкретной таблицы. Но я пытаюсь настроить модели, чтобы я мог приносить связанные данные и выполнять проверки. Для этого я использую книжную полку.Правильный способ настройки моделей в Node.js
Я настроил мои модели, как это:
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] }
Я пытаюсь получить результаты db выглядят следующим образом:
var Meal = require('../models/meal');
var meals = Meal.fetchAll().then(function(collection) {
return collection;
});
...
Почему это ничего не возвращает? Это похоже на то, что предлагает documentation.
Куда я иду не так? Я предполагаю, что это связано с неправильной настройкой книжной полки или правильной моделью.
Любые советы?
Таким образом, вам даже не нужно назначать переменные блюда для коллекций значений. Вы можете просто написать код в этом обратном вызове, а затем вместо возврата коллекции просто использовать его в своем коде, где вместо этого вы бы использовали переменную питания. – StackingKarma
Хорошо, это имеет большой смысл. Я отредактировал код и получил другую ошибку: 'this._reset не является функцией'. Я считаю, что я каким-то образом экспортирую модель. Но обещание - это то, почему он не вернулся. Благодарю. – user3162553
Возможно, вы получите эту ошибку, если ваш вход для сохранения() является моделью книжной полки, а не объектом –