这是我在这里的第一个问题,所以请原谅礼节上的任何异常。
我是 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 模块的一部分的方法。我试过以几种方式在它之前添加 exports 和 module.exports 但没有成功。它正在监听一个事件而不是一个正常的功能,这让我很困惑。
我将如何在单独的文件中获取事件监听器? 我也在尝试尽可能简单地解决这个问题,所以此时我只使用 Node.js 和 Tedious。
最佳答案
改变
exports.makeConnection = function () {
到
function makeConnection() {
...
module.exports = {makeConnection}
作为附加更改,您需要将连接监听器放在与连接变量相同的范围内。就个人而言,我也会让 makeConnection 返回一个带有连接的 Promise,这样您就不会在失败/尚未连接的连接上进行操作。有点像
var Connection = require('tedious').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}
关于javascript - 是否可以将 Tedious 连接和请求事件监听器放在 Node.js 的单独模块中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50612401/