Как правильно написать модуль в Node.JS ?

#javascript #node.js

#javascript #node.js

Вопрос:

Итак, я пытаюсь сделать так, чтобы мне не нужно было иметь несколько подключений к моей базе данных, когда я могу просто поместить свое соединение и функцию runQuery в файл и просто запросить его в другом файле. Вот что у меня есть в моем «mysql.js «досье.

 const mysql = require('mysql');

module.exports = function () {
    let connection = mysql.createConnection({
        host: '------',
        user: 'voltclou_site',
        password: '----',
        database: process.env.database
    })

    connection.connect(function(err) {
        if (err) {
            console.error('[DATABASE] Error connecting: '   err.stack);
            return;
        }
        console.log('[DATABASE] Connected as id '   connection.threadId);
    });

    async function runQuery(query, values) {
        return new Promise((resolve, reject) => {
            connection.query(query, values, function (error, results) {
                if (error) return reject(error)
                return resolve(results)
            })
        })
    }
}
  

Вот как я хотел бы потребовать его в своих файлах:

 const { connection, runQuery } = require('./functions/mysql')
  

Правильно ли я это делаю? Я новичок во всей этой модульной вещи. Я пытался разделить свои файлы, потому что один index.js с более чем 3000 линиями — это безумие. Спасибо за любую помощь.

Комментарии:

1. Нет, вам нужно удалить свой текущий module.exports = function() { .keep this body at tope level..} и добавить, в конце файла, module.exports = {connection, runQuery};

2. Обратите внимание, что вы поделились здесь данными для входа. Если этот пароль используется где-либо, я рекомендую вам изменить его сейчас.

3. Спасибо за предупреждение, я только что сменил пароль к учетной записи.

Ответ №1:

Нет, вы не сделали это правильно. Что вы сделали, вы экспортировали его по умолчанию, но хотите экспортировать именованные функции. Вы можете сделать это следующим образом:

 const mysql = require("mysql");

let connection = mysql.createConnection({
  host: "81.19.215.6",
  user: "voltclou_site",
  password: "yogO{6,F@8WS",
  database: process.env.database
});

connection.connect(function(err) {
  if (err) {
    console.error("[DATABASE] Error connecting: "   err.stack);
    return;
  }
  console.log("[DATABASE] Connected as id "   connection.threadId);
});

async function runQuery(query, values) {
  return new Promise((resolve, reject) => {
    connection.query(query, values, function(error, results) {
      if (error) return reject(error);
      return resolve(results);
    });
  });
}

module.exports = {
  connection,
  runQuery
};
  

Ответ №2:

Значение, которое вы описали, { connection, runQuery } , должно быть значением, присвоенным module.exports :

 const mysql = require('mysql');

let connection = mysql.createConnection({ ... });
connection.connect(...);
let runQuery = async (query, values) => { ... };

module.exports = { connection, runQuery };
  

Возможно, вам даже не нужно экспортировать connection , если все, что вам нужно в другом месте, есть runQuery !