Ahm*_*rib 2 javascript postgresql node.js pgadmin sequelize.js
我正在开始使用Sequelize。我正在关注他们在其网站上提供的文档:http : //docs.sequelizejs.com/manual/installation/getting-started.html
const Sequelize = require('sequelize');
const sequelize = new Sequelize('haha', 'postgres', 'postgres', {
host: 'localhost',
dialect: 'postgres',
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
// SQLite only
storage: 'path/to/database.sqlite'
});
sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
})
.catch(err => {
console.error('Unable to connect to the database:', err);
});
const User = sequelize.define('user', {
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
}
});
// force: true will drop the table if it already exists
User.sync({force: true}).then(() => {
// Table created
return User.create({
firstName: 'John',
lastName: 'Hancock'
});
});
Run Code Online (Sandbox Code Playgroud)
到这里为止,一切正常。并正确构建并填充了“用户”表。(尽管我不理解Sequelize会在“用户”后自动添加“ s”,但有任何解释。)
但是,当我添加以下代码部分时:
User.findAll().then(users => {
console.log(users)
})
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
未处理的拒绝SequelizeDatabaseError:关系“用户”不存在
所以我的问题是:
小智 7
在定义模型时,可以添加配置,在这种情况下,必须添加的选项是freezeTableName防止名称复数。
const User = sequelize.define('user', {
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
}
}, {
// disable the modification of table names; By default, sequelize will automatically
// transform all passed model names (first parameter of define) into plural.
// if you don't want that, set the following
freezeTableName: true,
});
Run Code Online (Sandbox Code Playgroud)
小智 6
还有另一种有趣的方法可以避免这种情况。但你需要真正关注这种实施方式。
const User = sequelize.define("user", {
firstname: {
type: Sequelize.STRING
},
lastname: {
type: Sequelize.STRING
}
});
Run Code Online (Sandbox Code Playgroud)
你故意放在user这里并users在其他编码地方使用(假设sequelize会自动将所有传递的模型名称(define的第一个参数)转换为复数)。这种编码方式将简化您的代码。
小智 5
出现此问题的原因是创建表是一个异步函数。问题是,findAll() 函数可以在表尚未创建时执行。要解决这个问题,您可以使用:
(async ()=>{
await User.sync({force: true});
// Table created
const users=await User.findAll();
console.log(users);
})();
Run Code Online (Sandbox Code Playgroud)
小智 1
运行该代码两次。
第二次运行之前,注释掉以下代码,
// force: true will drop the table if it already exists
User.sync({force: true}).then(() => {
// Table created
return User.create({
firstName: 'John',
lastName: 'Hancock'
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8434 次 |
| 最近记录: |