Я новичок в Node и Sequelize, и у меня возникла проблема с установлением соединения с базой данных MySQL. Интересно, почему нужны зависимости Postgres, даже если установить диалект на mysql one. Буду признателен, если вы поможете мне указать на проблему.NodeJS/Sequelize/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
команда используется)
От моделей/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.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"
}
}
UPDATE 2
Теперь я вижу, у меня есть дополнительное сообщение:
Error: The dialect mysql is not supported. (Error: Cannot find module './mysql'.)
Однако, у меня есть он установлен, чтобы корневой каталог node_modules
.
UPDATE 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
- проблема появляется
UPDATE 4 - Проблема решена
Прежде всего действительно спасибо за вашу помощь! Проблема на самом деле произошла, потому что я пытался смешивать сервер и клиентские стороны в одном приложении (я просто играл). Модули Sequelize и mysql, похоже, не работают в среде браузера. Когда серверная сторона помещена вне реагирующего приложения, все ведет себя так, как ожидалось.
Вам не нужен модуль postgres. Убедитесь, что вы используете диалоги 'mysql2', хотя и не' mysql', так как вы используете интерфейс 'mysql2'. – user3254198
Какое значение вы получаете, когда выполняете 'console.log (config)' in 'models/index.js' – AJS
@AJS,' config.use_env_variable' не определен, что кажется мне разумным, так как я Не хотите использовать конфигурацию, взятую из переменной окружения, но из 'config.json'. Я прав? – Mat