Я пытаюсь найти решение для этого, но независимо от того, сколько я прочитал о деструктуризации ES6 и глобальных переменных, мне все еще не удается решить эту проблему.
Итак, я использую sequelize для обрабатывать мою базу данных MySQL, и она работала отлично, пока я не изменил файл базы данных. js и не внедрил в него «postgres», потому что я хотел добавить синтаксис (CREATE DATABASE IF NOT EXISTS ..) в моя база данных. js, так как оказалось, что это не так просто и легко сделать с помощью продолжения. Теперь основная проблема заключается в том, что после того, как я изменил файл базы данных. js, я больше не могу ссылаться на / извлекать переменную «sequelize», так как она теперь находится внутри области, которая находится внутри другой функции ... Я просто Мне нужно найти способ извлечь эту переменную и иметь возможность ее деструктурировать, чтобы я мог отправить ее с помощью module.exports и иметь возможность использовать ее в файле других моих пользователей. js (в котором есть модель базы данных моих пользователей).
Это моя база данных . js файл (все конфигурации моей базы данных здесь)
const Sequelize = require('sequelize');
const pg = require('pg');
function initialize(callback) {
var dbName = 'onlinemarket',
username = 'root',
password = 'root',
host = '127.0.0.1'
var sequelize= ''; // in order to make it a global variable
var conStringPri = 'postgres://' + username + ':' + password + '@' + host + '/postgres';
var conStringPost = 'postgres://' + username + ':' + password + '@' + host + '/' + dbName;
// connect to postgres db
pg.connect(conStringPri, function(err, client, done) {
// create the db and ignore any errors, for example if it already exists.
client.query('CREATE DATABASE IF NOT EXISTS onlinemarket', function (err) {
if (err) throw err;
client.query('USE onlinemarket', function (err) {
if (err) throw err;
client.query('CREATE TABLE IF NOT EXISTS users('
+ 'ID INT NOT NULL AUTO_INCREMENT,'
+ 'username VARCHAR(255) NOT NULL,'
+ 'password VARCHAR(255) NOT NULL,'
+ 'first_name VARCHAR(255),'
+ 'last_name VARCHAR(255),'
+ 'PRIMARY KEY(ID),'
+ ');', function (err) {
if (err) throw err;
client.query('CREATE TABLE IF NOT EXISTS posts('
+ 'ID INT NOT NULL AUTO_INCREMENT,'
+ 'title VARCHAR(255) NOT NULL,'
+ 'description VARCHAR(255) NOT NULL,'
+ 'category VARCHAR(255) NOT NULL,'
+ 'city VARCHAR(255) NOT NULL,'
+ 'country VARCHAR(255) NOT NULL,'
+ 'images VARCHAR(255) NOT NULL,'
+ 'price DECIMAL(10,2) NOT NULL,'
+ 'postDate DATE NOT NULL,'
+ 'deliveryType VARCHAR(255) NOT NULL,'
+ 'sellerName VARCHAR(255) NOT NULL,'
+ 'mobile VARCHAR(255) NOT NULL,'
+ 'PRIMARY KEY(ID),'
+ ');', function (err) {
if (err) throw err;
});
});
});
});
}, function(err) {
//db should exist now, initializing Sequelize after that
sequelize = new Sequelize(conStringPost); //this is the variable which i need to get
callback(sequelize);
client.end(); // close the connection
sequelize.authenticate().then(() => {
console.log('Database connection has been established successfully.');
}).catch(err => {
console.error('Unable to connect to the database: ' + err);
});
});
}
module.exports = { sequelize };
Это файл пользователей. js, где я создаю модель пользователя и, как вы можете видеть в верхней части файла, пытаясь импортировать / требовать деструктурированный "sequelize msgstr "переменная, чтобы заставить работать 'sequelize.define ()'. Пока я не извлекаю и не экспортирую переменную sequelize должным образом, консоль будет выдавать мне сообщение «sequelize is not определена»
Это мои пользователи. js file
const Sequelize = require('sequelize');
const sequelize = require('../database').sequelize;
//The app needs to understand "sequelize.define"
module.exports = sequelize.define(
'users',
{
ID: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
username: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
},
first_name: {
type: Sequelize.STRING
},
last_name: {
type: Sequelize.STRING
}
}, {
timestamps: false
}
);
Он прекрасно работал до того, как я внес в него изменения (в результате добавления "postgres"). Вот мой старый файл database. js до изменений, когда я использовал только sequelize, и он плавно экспортировал переменную для ссылки в файле users. js.
const Sequelize = require('sequelize');
const db = {}
const sequelize = new Sequelize("onlinemarket", "root", "root", {
host: "127.0.0.1",
dialect: "mysql"
})
sequelize.authenticate()
.then(() => {
console.log('Database connection has been established successfully.');
})
.catch(err => {
console.error('Unable to connect to the database: ' + err);
});
db.sequelize = sequelize;
db.Sequelize = sequelize;
module.exports = db;