ObjectionJS - Группировка моделей в файле слоя данных
У меня запущено приложение NodeJS fastify
с fastify-objectionjs
,
Для удобства я бы хотел сгруппировать все модели в один файл с именем _main.js
где я экспортирую массив моделей внутри models
папка.
Поскольку регистрация fastify-objectionjs требует массива моделей, я подумал, что могу просто импортировать массив из моего _main.js
и скормить его как есть функции регистрации.
Но ObjectionJS говорит мне, что предоставленные модели недействительны.
/app.js (точка входа в узел)
const fastify = require('fastify')({
logger: true
})
const knexConfig = require('./knexfile')
const dataLayer = require('./models/_main')
fastify.register(require('fastify-objectionjs'), {
knexConfig: knexConfig,
models: dataLayer
})
// Also tried:
// fastify.register(require('fastify-objectionjs'), {
// knexConfig: knexConfig,
// models: [dataLayer]
// })
/models/_main.js
const User = require('./user.model')
var dataLayer = [User]
module.exports = dataLayer
// Also tried without var:
// module.exports = {
// dataLayer: [
// User
// ]
// }
/models/user.model.js
const Knex = require('knex')
const connection = require('../knexfile')
const { Model } = require('objection')
const knexConnection = Knex(connection)
Model.knex(knexConnection)
class User extends Model {
static get tableName () {
return 'users'
}
}
module.exports = { User }
Кажется, я не могу найти проблему в потоке файлов, но если я создаю массив моделей на лету, приложение запускается гладко:
/app.js (точка входа в узел)
const fastify = require('fastify')({
logger: true
})
const knexConfig = require('./knexfile')
const User = require('./models/user.model') // changed
fastify.register(require('fastify-objectionjs'), {
knexConfig: knexConfig,
models: [User] // changed
})
Есть идеи, почему это не работает? Спасибо заранее за ваше время.
1 ответ
Нашел ошибку, мне просто нужно было использовать деструктуризацию в require
из User
, как это:
/models/_main.js
// BAD
// const User = require('./user.model')
// GOOD
const { User } = require('./user.model')
module.exports = [User]
Работает как шарм.
Полезный вопрос, объясняющий разницу: фигурные скобки (фигурные скобки) в узле требуют выражения