我正在学习node.js和sequelizer,我遇到了一个问题,即我使用Sequelizer创建了一个User模型,不幸的是当我想在index.js中运行sequelizer.sync(); 它在控制台中向我显示结果,但它不会创建表格。
我的型号:
const Sequelize = require('sequelize');
const sequelize = require('../util/database');
const User = sequelize.define('user', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
allowNull: false,
primaryKey: true
},
name: {
type: Sequelize.TEXT,
allowNull: false
},
surname: {
type: Sequelize.TEXT,
allowNull: false
}
});
module.exports = User;
Run Code Online (Sandbox Code Playgroud)
我的数据库配置
const Sequelize = require('sequelize');
const sequelize = new Sequelize('node-nauka', 'root', '', {
dialect: 'mysql',
host: 'localhost'
});
module.exports = sequelize;
Run Code Online (Sandbox Code Playgroud)
索引.js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const defaultRoutes = require('./routes/default');
const sequelize = require('./util/database');
app.use(bodyParser.json());
app.use(defaultRoutes);
sequelize.sync().then(result => {
console.log(result);
app.listen(3000);
}).catch(err => {
console.log(err);
});
Run Code Online (Sandbox Code Playgroud)
同步结果: https: //pastebin.com/rtxqkMtx 我想念想法,在几个数据库上尝试过,效果相同,没有错误,但也没有创建表。
Nik*_*are 11
就我而言,我只是将模型导入到 app.js
const sequelize = require("./src/Utils/database");
const User = require("./src/models/User");
sequelize
.sync()
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});
Run Code Online (Sandbox Code Playgroud)
@PawelC你的代码和我的一样所以它也适合你
谢谢
小智 9
首先,您没有向我们展示您的./routes/default. 你在那里使用你的模型吗?如果没有,这里就是错误。在pastebin的输出中你可以看到:
models: {},
modelManager: ModelManager { models: [], sequelize: [Circular] },
Run Code Online (Sandbox Code Playgroud)
在路线中使用模型,您将看到:
models: { user: user },
modelManager: ModelManager { models: [ user ], sequelize: [Circular] },
Run Code Online (Sandbox Code Playgroud)
其次,require代码中的 s 有点像意大利面条。在index.js你的 require中./util/database,在./models/user(例如)你的 require中./util/database,所以流程是:
index.js < ./util/database > ./models/user
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,需求的一个方向没有流动 -index.js对您的模型一无所知。Require 是 import 语句,而不是代码注入。
如果您将在路线中使用模型,流程将是:
index.js < ./util/database > ./models/user > ./models/default > index.js
Run Code Online (Sandbox Code Playgroud)
所以会有从 model 到 的流量index.js。
为了更全面,您可以将数据库配置和所有模型收集在一个集合中(主要是这样./models/index.js您可以通过 获取它require('./models')),并从该集合导入sync()到路由以使用它。流动:
(config and models) > ./models/index.js > migrate.js > sync()
(config and models) > ./models/index.js > (routes) > index.js
Run Code Online (Sandbox Code Playgroud)
第二个最佳实践是不要在主应用程序文件中使用sync()(对于您来说:)index.js。现在,当您开发时,它并不那么重要,但在生产中,这可能会破坏数据库中的数据(例如删除行)。更好的方法是将其用作迁移。
您可以在我们的示例博客应用程序中查看此主题的示例:https://github.com/OptizeTeam/blog-api-node