Sequelize 未能创建 table,错误为 "Executing (default): SELECT 1+1 AS result"
Sequelize failing to create a table with the error "Executing (default): SELECT 1+1 AS result"
感谢您抽出宝贵时间提供帮助。当 运行 我的服务器收到消息“正在执行(默认):SELECT 1+1 AS 结果”。我的表没有被创建。我该如何解决这个错误?我正在使用技术 MySQL、Sequelize、JavaScript、Express 和 Node.
Connection.js(我检查了.env,信息是准确的)
const Sequelize = require('sequelize');
require('dotenv').config();
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PW, {
host: 'localhost',
dialect: 'mysql',
port: 3306
});
module.exports = sequelize;
Schema.sql
DROP DATABASE IF EXISTS events_db;
CREATE DATABASE events_db;
客户模型
const { DataTypes, Model } = require('sequelize');
const sequelize = require('../config/connection');
class Customer extends Model {}
Customer.init(
{
uuid: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV1,
primaryKey: true,
allowNull: false,
unique: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true,
}
},
phone: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
notEmpty: true,
is: /^[\+]?[(]?\d{3}[)]?[-\s\.]?\d{3}[-\s\.]?\d{4,6}$/im
}
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
isEmail: true
}
},
address: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
notEmpty: true
}
}
},
{
sequelize,
freezeTableName: true,
underscored: true,
modelName: 'customer'
}
);
module.exports = Customer;
型号index.js
const Customer = require('./Customer');
const Event = require('./Event');
const EventType = require('./EventType');
const Reservation = require('./Reservation');
Customer.hasMany(Reservation, {foreignKey: { allowNull: false }});
Event.hasMany(Reservation, {foreignKey: { allowNull: false }});
Event.hasOne(EventType, {foreignKey: { allowNull: false }});
Event.hasOne(Customer, {foreignKey: { allowNull: false }});
module.exports = { Customer, Event, EventType, Reservation };
Server.js
const express = require('express');
const sequelize = require('./config/connection');
const app = express();
const PORT = process.env.PORT || 3001;
const routes = require('./routes');
app.use(express.json());
app.use(express.urlencoded({
extended: true
}));
app.use(routes);
sequelize.sync({ force: false }).then(() => {
app.listen(PORT, () => {
console.log(`App is listening on port ${PORT}`);
});
});
将模型导入 server.js 文件。不需要调用变量。这允许续集“看到”我的模型。在实现控制器或 GraphQL 时,可以删除此导入。
感谢您抽出宝贵时间提供帮助。当 运行 我的服务器收到消息“正在执行(默认):SELECT 1+1 AS 结果”。我的表没有被创建。我该如何解决这个错误?我正在使用技术 MySQL、Sequelize、JavaScript、Express 和 Node.
Connection.js(我检查了.env,信息是准确的)
const Sequelize = require('sequelize');
require('dotenv').config();
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PW, {
host: 'localhost',
dialect: 'mysql',
port: 3306
});
module.exports = sequelize;
Schema.sql
DROP DATABASE IF EXISTS events_db;
CREATE DATABASE events_db;
客户模型
const { DataTypes, Model } = require('sequelize');
const sequelize = require('../config/connection');
class Customer extends Model {}
Customer.init(
{
uuid: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV1,
primaryKey: true,
allowNull: false,
unique: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true,
}
},
phone: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
notEmpty: true,
is: /^[\+]?[(]?\d{3}[)]?[-\s\.]?\d{3}[-\s\.]?\d{4,6}$/im
}
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
isEmail: true
}
},
address: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
notEmpty: true
}
}
},
{
sequelize,
freezeTableName: true,
underscored: true,
modelName: 'customer'
}
);
module.exports = Customer;
型号index.js
const Customer = require('./Customer');
const Event = require('./Event');
const EventType = require('./EventType');
const Reservation = require('./Reservation');
Customer.hasMany(Reservation, {foreignKey: { allowNull: false }});
Event.hasMany(Reservation, {foreignKey: { allowNull: false }});
Event.hasOne(EventType, {foreignKey: { allowNull: false }});
Event.hasOne(Customer, {foreignKey: { allowNull: false }});
module.exports = { Customer, Event, EventType, Reservation };
Server.js
const express = require('express');
const sequelize = require('./config/connection');
const app = express();
const PORT = process.env.PORT || 3001;
const routes = require('./routes');
app.use(express.json());
app.use(express.urlencoded({
extended: true
}));
app.use(routes);
sequelize.sync({ force: false }).then(() => {
app.listen(PORT, () => {
console.log(`App is listening on port ${PORT}`);
});
});
将模型导入 server.js 文件。不需要调用变量。这允许续集“看到”我的模型。在实现控制器或 GraphQL 时,可以删除此导入。