#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
!