Экспорт переменной внутри функции с помощью module.exports для ссылки в другом файле - PullRequest
1 голос
/ 28 февраля 2020

Я пытаюсь найти решение для этого, но независимо от того, сколько я прочитал о деструктуризации 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;
...