NodeJS/Sequelize/MySQL - 为啥需要 postgres 依赖项?
Posted
技术标签:
【中文标题】NodeJS/Sequelize/MySQL - 为啥需要 postgres 依赖项?【英文标题】:NodeJS/Sequelize/MySQL - Why postgres dependencies are needed?NodeJS/Sequelize/MySQL - 为什么需要 postgres 依赖项? 【发布时间】:2017-04-09 14:42:37 【问题描述】:我是 Node 和 Sequelize 的新手,在建立与 mysql 数据库的连接时遇到问题。我想知道为什么即使将方言设置为 mysql 也需要 Postgres 依赖项。如果您能帮我指出问题,我将不胜感激。
来自 packages.json
"dependencies":
// ...
"mysql2": "1.1.2",
"sequelize": "3.27.0"
,
我尝试连接数据库的方式:
var Sequelize = require('sequelize');
var sequelize = new Sequelize('dbName', 'dbUser', 'dbPass',
host: 'localhost',
dialect: 'mysql'
);
sequelize.authenticate()
.then(function(err)
console.log('Connection has been established successfully.');
)
.catch(function (err)
console.log('Unable to connect to the database:', err);
);
我面临的错误:
Failed to compile.
Error in ./~/sequelize/lib/dialects/postgres/hstore.js
Module not found: 'pg-hstore' in ~/node_modules/sequelize/lib/dialects/postgres
@ ./~/sequelize/lib/dialects/postgres/hstore.js 3:13-33
更新 1(使用
sequelize init
命令)
来自 models/index.js:
'use strict';
var fs = require('fs');
var path = require('path');
var Sequelize = require('sequelize');
var basename = path.basename(module.filename);
var env = 'development'; //process.env.NODE_ENV || 'development';
var config = require(__dirname + '/../config/config.json')[env];
var db = ;
if (config.use_env_variable)
var sequelize = new Sequelize(process.env[config.use_env_variable]);
else
var sequelize = new Sequelize(config.database, config.username, config.password, config);
fs
.readdirSync(__dirname)
.filter(function(file)
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
)
.forEach(function(file)
var model = sequelize['import'](path.join(__dirname, file));
db[model.name] = model;
);
Object.keys(db).forEach(function(modelName)
if (db[modelName].associate)
db[modelName].associate(db);
);
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
还有我的 config/config.json:
"development":
"username": "dbUser",
"password": "dbPassword",
"database": "dbName",
"host": "127.0.0.1",
"dialect": "mysql2"
,
"test":
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql2"
,
"production":
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql2"
更新 2
现在我看到我还有一条消息:
Error: The dialect mysql is not supported. (Error: Cannot find module './mysql'.)
但是,我已将其安装到 node_modules
目录的根目录中。
更新 3
重现问题的步骤:
create-react-app tmpApp
npm install --save mysql sequelize
npm install -g sequelize-cli
sequelize init
添加到src/index.js
:var models = require('../models')
npm start
- 问题出现
更新 4 - 问题已解决
首先非常感谢您的帮助!问题实际上发生了,因为我试图将服务器端和客户端混合到一个应用程序中(我只是在玩)。 Sequelize 和 mysql 模块本身似乎不适用于浏览器环境。当服务器端放置在 react-app 之外时,一切都按预期运行。
【问题讨论】:
您不需要 postgres 模块。确保您使用的是mysql2
方言,而不是mysql
,因为您使用的是mysql2
接口。
在models/index.js
中执行console.log(config)
得到的价值是多少
@AJS,config.use_env_variable
未定义,这对我来说似乎是合理的,因为我不想使用从环境变量而是从 config.json
获取的配置。我说的对吗?
是的,配置变量的输出是什么
我已经更新了我的问题
【参考方案1】:
在您的数据库配置中,您必须将配置设置为要使用的其他内容。
-
使用 sequelize 检查环境。通常,它是数据库目录中的 config.json 文件。
将方言更改为 mysql2,因为这是您想要使用的。
【讨论】:
我的项目很空,所以我只使用了 sequelize-cli init 命令并修改了config/config.json
。现在我也使用models/index.js
的sequelize 实例,但问题依然存在。方言当然改成mysql2
。
显示你的models/index.js
它应该默认使用来自config.json
的开发配置,否则默认使用postgres。
@Anirudha 如果您更改为方言mysql2
,它将给您以下错误:支持的方言:mariadb、mssql、mysql、postgres 和 sqlite。
@Mat 你需要安装这些依赖。 npm install --save mysql
@Anirudha,其实我有。事实上,我已经找到了问题 - 请查看我更新的问题。【参考方案2】:
要解决您的问题,请执行以下操作:
`npm install mysql ---save` instead of `mysql2`
这将使您的代码正常工作。从我在官方文档here 中看到的内容来看,它们似乎也支持 mysql2,但它不起作用。正如我已经测试并得到了类似的结果。我会建议在他们的 github 中提出一个问题,以便他们可以修复它。你可以这样做here
【讨论】:
不幸的是,我已经尝试了这两种方法,结果相同:Error: The dialect mysql is not supported. (Error: Cannot find module './mysql'.)
。或Error: The dialect mysql2 is not supported. (Error: Cannot find module './mysql2'.)
当然我已经安装了。
当我尝试它时它工作了为什么不将两者都删除并重新安装mysql
,你可以通过npm uninstall <module_name> --save
这样做
保持方言为mysql
而不是mysql2
方言设置为 mysql
和 npm 包:"mysql": "2.12.0"
、"sequelize": "2.0.0"
。但问题仍然存在。
您的代码是否准确地显示在您的帖子中? IE。您在哪里创建连接的文件?以上是关于NodeJS/Sequelize/MySQL - 为啥需要 postgres 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章