shu*_*ury 14 postgresql node.js sequelize.js
我一直在研究使用PostgreSQL数据库的NodeJS项目.我正在尝试实现迁移到数据库.另外,使用Sequelize.设置迁移文件夹和配置后,它会在运行db:migrate时抛出错误
错误是:"自v4.0.0起,需要明确提供方言"
JPe*_*ero 18
我的解决方案基于我为NODE_ENV变量设置的内容.
echo $NODE_ENV
如果您没有为该变量设置任何内容,请尝试使用以下内容进行设置:
export NODE_ENV=development
如果值是存在,请确保你在你的config文件中的条目该值.对我来说,我喜欢用local.所以我不得不将我的配置更新为:
{
local: {
username: 'root',
password: null,
database: 'database_dev',
host: '127.0.0.1',
dialect: 'postgres'
},
development: {
username: 'root',
password: null,
database: 'database_dev',
host: '127.0.0.1',
dialect: 'postgres'
},
test: {
username: 'root',
password: null,
database: 'database_test',
host: '127.0.0.1',
dialect: 'postgres'
},
production: {
username: 'root',
password: null,
database: 'database',
host: '127.0.0.1',
dialect: 'postgres'
}
}
Run Code Online (Sandbox Code Playgroud)
Yas*_*has 15
事实证明,由于 typecipt 的转换/编译,我遇到了这个错误。
一点背景知识:我在打字稿项目中使用sequelize。数据库配置文件位于一个database.ts文件中。
const config = {
development: {
username: env.PG_USERNAME,
password: env.PG_PASSWORD,
database: 'sample_db',
host: env.PG_HOST,
port: env.PG_PORT,
dialect: 'postgres',
},
test: {
username: env.PG_USERNAME,
password: env.PG_PASSWORD,
database: 'sample_db',
host: env.PG_HOST,
port: env.PG_PORT,
dialect: 'postgres',
},
production: {
username: env.PG_USERNAME,
password: env.PG_PASSWORD,
database: 'sample_db',
host: env.PG_HOST,
port: env.PG_PORT,
dialect: 'postgres',
},
};
export default config;
Run Code Online (Sandbox Code Playgroud)
在.sequelizerc文件中,我指向database.ts文件的转译版本,即dist/config/database.js文件。如下所示:
const path = require('path');
module.exports = {
env: process.env.NODE_ENV || 'development',
config: path.resolve('dist', 'config', 'database.js'),
...
};
Run Code Online (Sandbox Code Playgroud)
但是在检查文件的转译版本后database.ts,我注意到配置被导出为:
module.exports.default = config
Run Code Online (Sandbox Code Playgroud)
但sequelize期望配置为module.exports.
因此,我database.ts通过将这一行附加到文件末尾来修改文件,这为我解决了这个问题。
...
module.exports = config;
Run Code Online (Sandbox Code Playgroud)
小智 8
检查方言一次。
const Sequelize = require('sequelize');
// Option 1: Passing parameters separately
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: /* one of 'mysql' | 'mariadb' | 'postgres' | 'mssql' */
});
Run Code Online (Sandbox Code Playgroud)
小智 7
检查您的配置文件(环境名称)
{
development: {
username: 'root',
password: null,
database: 'database_development',
host: '127.0.0.1',
dialect: 'mysql'
},
test: {
username: 'root',
password: null,
database: 'database_test',
host: '127.0.0.1',
dialect: 'mysql'
},
production: {
username: 'root',
password: null,
database: 'database_production',
host: '127.0.0.1',
dialect: 'mysql'
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
我遇到了同样的错误,并且我在代码中看到了这个错误。
title: {
type: Sequelize,
allowNull: false,
},
Run Code Online (Sandbox Code Playgroud)
用这个更改了我的代码,问题解决了:
title: {
type: Sequelize.STRING,
allowNull: false,
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26503 次 |
| 最近记录: |