首页 > 解决方案 > ObjectionJS - 在数据层文件中分组模型

问题描述

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
})

知道为什么这不起作用吗?在此先感谢您的时间。

标签: node.jsrequireobjection.jsfastify

解决方案


Found the gotcha, I just needed to use destructuring in the require of User, like this:

/models/_main.js

// BAD
// const User = require('./user.model')

// GOOD
const { User } = require('./user.model')

module.exports = [User]

Works like a charm.

Useful question that explains the difference: Curly brackets (braces) in node require statement


推荐阅读