model.js:
const Sequelize = require('sequelize')
const seq = require('./seq')
// seq.define:创建User模型
// 虽然这里是'user',但是实际上会创建为'users'
const User = seq.define('user', {
// 使用Sequelize创建时,id会自动创建,并设为主键、自增
// 同时会自动创建:createdAt 和 updatedAt
// 这两个字段,也就是说用Sequelize修改数据,会自动记录updatedAt,新增数据时,会自动记录createdAt
userName: {
type: Sequelize.STRING, // varchar(255)
allowNull: false,
comment: "用户名"
},
password: {
type: Sequelize.STRING, // varchar(255)
allowNull: false,
comment: "密码"
},
nickName: {
type: Sequelize.STRING, // varchar(255)
comment: "昵称"
}
})
// 创建Blog模型
const Blog = seq.define('blog', {
title: {
type: Sequelize.STRING,
allowNull: false
},
content: {
type: Sequelize.STRING,
allowNull: false
},
userId: {
type: Sequelize.STRING,
allowNull: false
}
})
// 【报错代码】
// 【写法1】外键关联,Blog只有唯一的User
Blog.belongsTo(User, {
// 创建外键Blog.userId => User.id
// 也就是说Blog.userId属于User.id,即多对一的关系(一个用户有多条微博)
foreignKey: 'userId'
})
// 【写法2】User有多个Blog
User.hasMany(Blog, {
// 也就是说Blog.userId属于User.id,即多对一的关系(一个用户有多条微博)
foreignKey: 'userId'
})
module.exports = {
User,
Blog
}
sync.js:
const seq = require('./seq')
require('./model.js')
// 测试连接
// seq.authenticate()返回的是promise,因此可以直接.then
seq.authenticate().then(() => {
console.log('auth ok')
}).catch(() => {
console.log('auth err')
})
// seq.sync:执行同步
// force: true表示如果数据库里面有这个表,那么就强制删除
seq.sync({ force: true }).then(() => {
console.log('sync ok')
// 将程序退出
process.exit()
}).catch(() => {
console.log('sync err')
})
seq.js:
const Sequelize = require('sequelize')
const conf = {
host: "localhost",
// 因为Sequelize不只可以操作mysql
dialect:"mysql"
}
const seq = new Sequelize("koa2_weibo", "root", "root",
conf)
module.exports = seq
老师您好,我在写belongsTo和hasMany进行外键关联,运行时会报错。并且数据库只会创建users表,而没有blogs表。
但是把belongsTo和hasMany,去掉这两段代码,程序就可以正常执行,可以正常创建。请问这是什么原因呢?谢谢。