我正在学习 Node.js 和 mySQL。我已经尝试过 Sequelize,根据我的学习源,同步应该创建新表(如果不存在)。但由于某种原因它不会创建新表。
这是我的database.js 文件
const Sequelize = require('sequelize');
const sequelize = new Sequelize('test-schema', 'root', 'mypassword',{dialect:'mysql', host:'localhost'});
module.exports = sequelize;
这是我的模型产品文件
const Sequelize = require('sequelize');
const sequelize = require('../util/database')
const Product = sequelize.define('product', {
id: {type: Sequelize.INTEGER, autoIncrement: true, allowNull: false, primaryKey: true},
title: Sequelize.STRING,
price: {type: Sequelize.DOUBLE, allowNull: false}
});
module.exports = Product;
这是我的 server.js 文件
const express = require('express');
const sequelize = require('./util/database')
const app = express();
app.get('/',(req,res,next)=>{
res.send({"id": "1"});
});
sequelize.sync().then(result=>{
//console.log(result);
app.listen(3000);
}).catch(err => {
console.log(err);
});
一旦我启动服务器,我就会得到
Executing (default): SELECT 1+1 AS result
我尝试将数据库文件中的架构名称更改为错误的名称,但收到错误消息架构不存在,因此我相信与数据库的连接是正确的
这是我安装的软件包
"dependencies": {
"express": "^4.17.1",
"mysql2": "^2.1.0",
"sequelize": "^5.21.10"
}
最佳答案
将所有模型定义为函数,以便您可以调用它们在sequelize中注册模型,然后在database.js中注册模型,就像我在this answer中描述的那样。您可以在这个答案的问题中看到如何像函数一样定义模型。
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
id: { type: DataTypes.BIGINT, allowNull: false, autoIncrement: true, unique: true, primaryKey: true },
first_name: DataTypes.STRING,
last_name: DataTypes.STRING
}, {});
User.associate = function(models) {
User.belongsTo(models.Role, { foreignKey: 'role_id' });
};
return User;
};
关于mysql - Sequelize 无法使用sync() 创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61895159/