sequelize.sync({force:true}) 不工作,方法的记录为空
sequelize.sync({force:true}) not working and the logging of method is empty
我在写这个问题的时候看到了很多问题。 none 他们中有同样的问题,在连续 20 小时试图解决这个问题后,我感到压力很大,如果我没有看到类似的问题,我深表歉意。好的,问题如下:我正在使用 nodejs、expressjs(4.17)、sequelize-cli(6.2.0) 和 sequelizejs(6.3.5) 做服务器并与 mysql(mysql2 2.1.0) 并且出于某种原因,当我使用函数 sequelize.sync()
(有或没有 {force:true}
)时,它只是不更新已经创建的数据库中的表,它什么都不做,没有错误,没有警告,只是没有做应该做的事情。
我使用 npx sequelize model:generate --name ... --attributes ...
创建了模型,因此创建的迁移没有我手动插入的任何内容,因为我搜索了不应该更改迁移文件的内容。然后我 运行 npx sequelize db:migrate
开始迁移到数据库,最后对未同步的模型进行了一些更改。
这里是 server.js 代码:
const http = require('http')
const Sequelize = require('sequelize')
const app = require('./src/app')
const port = process.env.PORT || 3000
const server = http.createServer(app)
const contatos = require('./src/_db/models/contatos')
const corretores = require('./src/_db/models/corretores')
const imoveis = require('./src/_db/models/imoveis')
const tipoimovel = require('./src/_db/models/tipoimovel')
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USERNAME, process.env.DB_PASSWORD, {
host: 'localhost',
dialect: "mysql" /* one of 'mysql' | 'mariadb' | 'postgres' | 'mssql' */,
logging: console.log,
})
sequelize.authenticate().then( () => {
console.log('Connection has been established successfully.');
sequelize.sync({logging:console.log, force:true})
.then(() => {
// console.log(`Database & tables created!`);
return server.listen(port)
}).catch((error)=>{
return console.error(error);
});
}).catch((error) => {
console.error('Unable to connect to the database:', error);
})
我的代码app.js:
const express = require('express')
const bodyParser = require('body-parser')
const morgan = require('morgan')
const Sequelize = require('sequelize')
const app = express()
app.use(morgan('dev'))
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*')
res.header(
'Access-Control-Allow-Headers',
'Origin, X-Requested-With, Accept, Authorization'
)
if (req.method === 'OPTIONS') {
res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET')
return res.status(200).json({})
}
next()
})
app.use((req, res, next) => {
const error = new Error('Not found')
error.status = 404
next(error)
})
app.use((error, req, res, next) => {
res.status(error.status || 500)
res.json({
error: {
message: error.message
}
})
})
module.exports = app
全部控制台结果:
[nodemon] restarting due to changes...
[nodemon] starting 'node server.js'
Executing (default): SELECT 1+1 AS result
Connection has been established successfully.
Executing (default): SELECT 1+1 AS result
Database & tables created!
最后是我尝试更新数据库的模型示例,已经进行了更改:
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class tipoImovel extends Model {
static associate(models) {
// define association here
this.hasOne(models.Imoveis)
}
};
tipoImovel.init({
tipoNome: {type:DataTypes.STRING,allowNull:false},
tipoSigla: {type: DataTypes.STRING(2),allowNull:false,unique:true}
}, {
sequelize,
modelName: 'tipoImovel',
});
return tipoImovel;
};
我已经像这样使用了同步,我为我工作,如果你愿意,你可以尝试它作为解决方案
'use strict';
const Sequelize = require('sequelize');
const cls = require('cls-hooked');
const namespace = cls.createNamespace('my-very-own-namespace');
Sequelize.useCLS(namespace);
const config = require("../environments/index");
// server connection settings
var db_instance = new Sequelize(config.DB.database, config.DB.username, config.DB.password, {
host: config.DB.host,
dialect: config.DB.dialect,
define: {
timestamps: false
},
logging: false
});
var sequelize = db_instance;
// checks the database connectivity
sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
})
.catch(err => {
console.error('Unable to connect to the database:', err);
});
const db = {};
db.sequelize = sequelize;
db.Sequelize = Sequelize;
// create the modal instance
db.users = require('../model/users.model')(sequelize, Sequelize);
db.country = require('../model/country.model')(sequelize, Sequelize);
db.state = require('../model/state.model')(sequelize, Sequelize);
db.city = require('../model/city.model')(sequelize, Sequelize);
db.verify_otp = require('../model/verify_otp.model')(sequelize, Sequelize);
db.organizations = require('../model/organizations.model')(sequelize, Sequelize);
db.features = require('../model/features.model')(sequelize, Sequelize);
db.user_features = require('../model/user_features.model')(sequelize, Sequelize);
db.roles = require('../model/roles.model')(sequelize, Sequelize);
db.user_roles = require('../model/user_roles.model')(sequelize, Sequelize);
db.sequelize.sync({ force: true }).then(() => {
console.log("Drop and re-sync db.");
});
module.exports = db;
我在写这个问题的时候看到了很多问题。 none 他们中有同样的问题,在连续 20 小时试图解决这个问题后,我感到压力很大,如果我没有看到类似的问题,我深表歉意。好的,问题如下:我正在使用 nodejs、expressjs(4.17)、sequelize-cli(6.2.0) 和 sequelizejs(6.3.5) 做服务器并与 mysql(mysql2 2.1.0) 并且出于某种原因,当我使用函数 sequelize.sync()
(有或没有 {force:true}
)时,它只是不更新已经创建的数据库中的表,它什么都不做,没有错误,没有警告,只是没有做应该做的事情。
我使用 npx sequelize model:generate --name ... --attributes ...
创建了模型,因此创建的迁移没有我手动插入的任何内容,因为我搜索了不应该更改迁移文件的内容。然后我 运行 npx sequelize db:migrate
开始迁移到数据库,最后对未同步的模型进行了一些更改。
这里是 server.js 代码:
const http = require('http')
const Sequelize = require('sequelize')
const app = require('./src/app')
const port = process.env.PORT || 3000
const server = http.createServer(app)
const contatos = require('./src/_db/models/contatos')
const corretores = require('./src/_db/models/corretores')
const imoveis = require('./src/_db/models/imoveis')
const tipoimovel = require('./src/_db/models/tipoimovel')
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USERNAME, process.env.DB_PASSWORD, {
host: 'localhost',
dialect: "mysql" /* one of 'mysql' | 'mariadb' | 'postgres' | 'mssql' */,
logging: console.log,
})
sequelize.authenticate().then( () => {
console.log('Connection has been established successfully.');
sequelize.sync({logging:console.log, force:true})
.then(() => {
// console.log(`Database & tables created!`);
return server.listen(port)
}).catch((error)=>{
return console.error(error);
});
}).catch((error) => {
console.error('Unable to connect to the database:', error);
})
我的代码app.js:
const express = require('express')
const bodyParser = require('body-parser')
const morgan = require('morgan')
const Sequelize = require('sequelize')
const app = express()
app.use(morgan('dev'))
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*')
res.header(
'Access-Control-Allow-Headers',
'Origin, X-Requested-With, Accept, Authorization'
)
if (req.method === 'OPTIONS') {
res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET')
return res.status(200).json({})
}
next()
})
app.use((req, res, next) => {
const error = new Error('Not found')
error.status = 404
next(error)
})
app.use((error, req, res, next) => {
res.status(error.status || 500)
res.json({
error: {
message: error.message
}
})
})
module.exports = app
全部控制台结果:
[nodemon] restarting due to changes...
[nodemon] starting 'node server.js'
Executing (default): SELECT 1+1 AS result
Connection has been established successfully.
Executing (default): SELECT 1+1 AS result
Database & tables created!
最后是我尝试更新数据库的模型示例,已经进行了更改:
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class tipoImovel extends Model {
static associate(models) {
// define association here
this.hasOne(models.Imoveis)
}
};
tipoImovel.init({
tipoNome: {type:DataTypes.STRING,allowNull:false},
tipoSigla: {type: DataTypes.STRING(2),allowNull:false,unique:true}
}, {
sequelize,
modelName: 'tipoImovel',
});
return tipoImovel;
};
我已经像这样使用了同步,我为我工作,如果你愿意,你可以尝试它作为解决方案
'use strict';
const Sequelize = require('sequelize');
const cls = require('cls-hooked');
const namespace = cls.createNamespace('my-very-own-namespace');
Sequelize.useCLS(namespace);
const config = require("../environments/index");
// server connection settings
var db_instance = new Sequelize(config.DB.database, config.DB.username, config.DB.password, {
host: config.DB.host,
dialect: config.DB.dialect,
define: {
timestamps: false
},
logging: false
});
var sequelize = db_instance;
// checks the database connectivity
sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
})
.catch(err => {
console.error('Unable to connect to the database:', err);
});
const db = {};
db.sequelize = sequelize;
db.Sequelize = Sequelize;
// create the modal instance
db.users = require('../model/users.model')(sequelize, Sequelize);
db.country = require('../model/country.model')(sequelize, Sequelize);
db.state = require('../model/state.model')(sequelize, Sequelize);
db.city = require('../model/city.model')(sequelize, Sequelize);
db.verify_otp = require('../model/verify_otp.model')(sequelize, Sequelize);
db.organizations = require('../model/organizations.model')(sequelize, Sequelize);
db.features = require('../model/features.model')(sequelize, Sequelize);
db.user_features = require('../model/user_features.model')(sequelize, Sequelize);
db.roles = require('../model/roles.model')(sequelize, Sequelize);
db.user_roles = require('../model/user_roles.model')(sequelize, Sequelize);
db.sequelize.sync({ force: true }).then(() => {
console.log("Drop and re-sync db.");
});
module.exports = db;