gpt4 book ai didi

mysql - NodeJS/Sequelize/MySQL - 为什么需要 postgres 依赖项?

转载 作者:行者123 更新时间:2023-11-28 23:22:45 24 4
gpt4 key购买 nike

我是 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 初始化
  • 添加到src/index.js:var models = require('../models')
  • npm start - 问题出现


更新 4 - 问题已解决

首先非常感谢您的帮助!问题实际上是因为我试图将服务器端和客户端混合到一个应用程序中(我只是在玩)。 Sequelize 和 mysql 模块本身似乎不能在浏览器环境中工作。当服务器端放置在 react-app 之外时,一切都按预期运行。

最佳答案

在您的数据库配置中,您必须将配置设置为其他要使用的配置。

  1. 使用 sequelize 检查环境。通常,它是数据库目录中的一个 config.json 文件。
  2. 将方言更改为 mysql2,因为这是您要使用的。

关于mysql - NodeJS/Sequelize/MySQL - 为什么需要 postgres 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40800892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com