node.js - 为什么 sequelize 没有为 postgresql 创建表中的所有列
问题描述
我正在为我的博客创建一个数据库模块。我为此使用 nodejs 和 sequelize 模块。我使用的数据库是 Postgresql。
这是续集初始化。
'use strict'
const Sequelize = require('sequelize')
// Creating a singletone
let sequelize = null
module.exports = function setupDatabase (config) {
if (!sequelize) {
sequelize = new Sequelize(config)
}
return sequelize
}
单例用于评估是否已经创建了前一个 sequelize 实例。
然后我有一个脚本配置:
'use strict'
const debug = require('debug')('diesanromero:db:setup')
const inquirer = require('inquirer')
const chalk = require('chalk')
const db = require('./')
const prompt = inquirer.createPromptModule()
async function setup () {
const answer = await prompt([
{
type: 'confirm',
name: 'setup',
message: 'This will destroy your database, are you sure?'
}
])
if (!answer.setup) {
return console.log('Nothing happend :)')
}
const config = {
database: process.env.DB_NAME || 'blog',
username: process.env.DB_USER || 'user',
password: process.env.DB_PASS || 'password',
host: process.env.DB_HOST || 'localhost',
dialect: 'postgres',
logging: s => debug(s),
setup: true
}
await db(config).catch(handleFatalError)
console.log('Success!')
process.exit(0)
}
function handleFatalError (err) {
console.error(`${chalk.red('[Fatal Error]')} ${err.message}`)
console.error(err.stack)
process.exit(1)
}
setup()
那是使用先前配置创建数据库的脚本。显然所有这些工作正常。数据库连接成功。然后我有三个模型。
文章.js
'use strict'
const Sequelize = require('sequelize')
const setupDatabase = require('../lib/db')
module.exports = function setupArticleModel (config) {
const sequelize = setupDatabase(config)
const stringRequired = {
type: Sequelize.STRING,
allowNull: false
}
const numberDefault = {
type: Sequelize.INTEGER,
allowNull: false,
default: 0
}
return sequelize.define('article', {
title: stringRequired,
slug: stringRequired,
description: stringRequired,
content: stringRequired,
likes: numberDefault,
shares: numberDefault
})
}
用户.js
'use strict'
const Sequelize = require('sequelize')
const setupDatabase = require('../lib/db')
module.exports = function setupAuthModel (config) {
const sequelize = setupDatabase(config)
const stringRequired = {
type: Sequelize.STRING,
allowNull: false
}
return sequelize.define('user', {
name: stringRequired,
username: stringRequired,
email: stringRequired
})
}
auth.js
'use strict'
const Sequelize = require('sequelize')
const setupDatabase = require('../lib/db')
module.exports = function setupUserModel (config) {
const sequelize = setupDatabase(config)
const stringRequired = {
type: Sequelize.STRING,
allowNull: false
}
return sequelize.define('auth', {
salt: stringRequired,
hash: stringRequired,
email: {
type: Sequelize.INTEGER,
allowNull: false
}
})
}
然后是我的主文件index.js
'use strict'
const defaults = require('defaults')
const setupDatabase = require('./lib/db')
const setupUserModel = require('./models/user')
const setupArticleModel = require('./models/article')
module.exports = async function (config) {
config = defaults(config, {
dialect: 'sqlite',
pool: {
max: 10,
min: 0,
idle: 10000
},
query: {
raw: true
}
})
const sequelize = setupDatabase(config)
const UserModel = setupUserModel(config)
const AuthModel = setupAuthModel(config)
const ArticleModel = setupArticleModel(config)
UserModel.hasMany(ArticleModel)
UserModel.hasOne(AuthModel)
ArticleModel.belongsTo(UserModel)
AuthModel.belongsTo(UserModel)
await sequelize.authenticate()
if (config.setup) {
await sequelize.sync({ force: true })
}
const User = {}
const Auth = {}
const Article = {}
return {
User,
Auth,
Article
}
}
此主文件与sequelize.authentication成功连接,然后执行迁移。请注意,用户模型与身份验证模型是一对一的关系。那么 User 模型与 Article 模型是一对多的关系。
碰巧 ORM 不会在各个表中创建所有列。有些如果创建了,有些则没有。
解决方案
推荐阅读
- hive - msck 修复表是否需要 hadoop/map-reduce?
- javascript - React react-bootstrap - 如何从外部组件关闭模式窗口
- algorithm - 如何解决合并排序中的递归错误?
- javascript - JavaScript 将数组与数组对象进行比较以查看它们的值是否匹配
- reactjs - Reducer 改变了状态但没有重新渲染
- node.js - npm 调试模块:如何以精美的字体显示对象?
- javascript - BrowserSync:拒绝执行内联脚本,锚标签不起作用
- apache-spark-sql - 分析表计算统计信息 - 未显示统计信息
- swift - UITableView 或 UILabel 在使用委托和协议观察者方法时发现 NIL,因为它在 viewDidLoad 之前调用
- javascript - 试图创造一个弹跳的波纹圆圈效果