Можно ли вынести утомительные прослушиватели событий подключения и запросов в отдельный модуль для Node.js?

Это мой первый вопрос, поэтому, пожалуйста, извините за любые отклонения в этикете.

Я новичок в Node.js и бэкэнд-программировании в целом. Прямо сейчас я использую Node и Tedious для подключения к локальному серверу SQL. Я хотел бы, чтобы мой файл main.js был чистым, поэтому я пытаюсь поместить все, что связано с моим соединением SQL, в отдельный файл js. Ниже будет самая простая возможная форма, которая у меня есть для main.js.

var http = require('http');
var sqlmodule = require('./SQLconnection');
http.createServer(function (req, res) {
  sqlmodule.makeConnection();
}).listen(8080);

Затем у меня есть файл SQLconnection.js.

var Connection = require('tedious').Connection;
exports.makeConnection = function () {
  var config = {
      userName: 'XXXXXX',
      password: 'XXXXXX',
      server: 'XXXXXX'
  };
  var connection = new Connection(config);
};

//The below code is my event listener but I don't know how 
//to incorporate it as part of the module.
connection.on('connect', function(err) {
  if (err) {
     console.error('Connection error', err);
  } else {
     console.log('Connected');
  }
});

У меня нет проблем, когда слушателя нет в файле, но я не могу найти способ сделать его частью модуля SQLconnection.js. Я пробовал добавить перед ним export и module.exports несколькими способами, но безуспешно. Он прислушивается к событию и не является нормальной функцией, что ставит меня в тупик.

Как мне получить слушателей событий в отдельном файле? Я также стараюсь сделать это как можно более ванильным, поэтому сейчас я просто использую Node.js и Tedious.


person Mario Gju    schedule 30.05.2018    source источник


Ответы (1)


изменение

exports.makeConnection = function () {

to

function makeConnection() {
...
module.exports = {makeConnection}

В качестве дополнительного изменения вам необходимо поместить прослушиватель подключения в ту же область, что и переменная подключения. Лично я бы также попросил makeConnection вернуть Promise с подключением, чтобы вы не работали с подключением, которое не удалось / еще не подключено. Что-то вроде

var Connection = require ('утомительно'). Connection;

function makeConnection() {
  var config = {
      userName: 'XXXXXX',
      password: 'XXXXXX',
      server: 'XXXXXX'
  };
  return new Promise((resolve, reject) => {
    var connection = new Connection(config);

    connection.on('connect', function(err) {
      if (err) return reject(err);
      resolve(connection);
    });
  }
};
module.exports = {makeConnection}
person Deadron    schedule 30.05.2018
comment
Для пояснения: если у меня есть несколько функций (например, одна для подключения, а другая для запроса), будет ли у меня строка module.exports = {functionName} внизу для каждой из них? - person Mario Gju; 30.05.2018
comment
Нет, вы экспортируете только один объект. Просто добавьте каждую функцию к экспортируемому объекту. ex module.exports = {makeConnection, disconnect, dosomethingelse} - person Deadron; 31.05.2018