使用 SecureGateway 将 NodeJS 应用程序与 OracleDB 连接
Connecting NodeJS app with OracleDB using SecureGateway
我正在尝试使用 SecureGateway 将我的 NodeJS 应用程序连接到 Oracle 数据库,但不起作用。
我执行了测试,当我 运行
var exec = require('child_process').exec;
var sys = require('sys');
function puts(error, stdout, stderr) { sys.puts(stdout) }
exec("ping 192.168.10.8", puts);
为了测试我的连接,我没有结果。所以我认为没有在我的应用程序和我的网关之间创建连接。
当我在 DataConnect 中 运行ning 时,工作正常。
我使用 require('bluemix-secure-gateway')
从我的服务器获取信息。
用于创建隧道的函数是
const tls = require('tls');
const net = require('net');
var creations = 0; // a running count of the number of open connections, when it becomes 0, the tunnel is closed.
var server; // a server listening for certificate requests from the gateway server
exports.create = function(port, options, callback) {
if(creations == 0) {
creations++;
//server not currently running, create one
server = net.createServer(function (conn) {
connectFarside(conn, options, function(err, socket) {
socket.pipe(conn);
conn.pipe(socket);
});
});
server.listen(port, function(){
callback();
});
} else{
//server already running
creations++;
callback()
}
};
function connectFarside(conn, options, callback) {
try {
var socket = tls.connect(options, function() {
callback(null, socket);
});
socket.on('error', function(err){
console.log('Socket error: ' + JSON.stringify(err));
});
} catch(err) {
callback(err);
}
};
exports.close = function(){
creations--;
if(creations == 0){
// close the server if this was
// the only connections running on it
server.close();
}
}
我得到的结果是我的本地网络。
要让您的应用程序连接到 Secure Gateway,它只需要使用您的目的地提供的云 host:port。要接受连接,您需要将 Secure Gateway 客户端 运行 放在可以访问您的数据库的位置。
例如,如果我想连接到我本地计算机上的 Mongo 数据库 运行,我可以创建一个目标,并将资源主机名设置为 localhost
并将资源端口设置为 27017
。创建此目的地后,将为其分配一个云 host:port(例如,cap-sg-prd-3.integration.ibmcloud.com:23432
)。
如果我的应用程序通常使用 mongodb://localhost:27017/myproject
之类的连接字符串连接到 Mongo,我会将其更改为 mongodb://cap-sg-prd-3.integration.ibmcloud.com:23432/myproject
,以便通过 Secure Gateway 路由连接。
我正在尝试使用 SecureGateway 将我的 NodeJS 应用程序连接到 Oracle 数据库,但不起作用。
我执行了测试,当我 运行
var exec = require('child_process').exec;
var sys = require('sys');
function puts(error, stdout, stderr) { sys.puts(stdout) }
exec("ping 192.168.10.8", puts);
为了测试我的连接,我没有结果。所以我认为没有在我的应用程序和我的网关之间创建连接。
当我在 DataConnect 中 运行ning 时,工作正常。
我使用 require('bluemix-secure-gateway')
从我的服务器获取信息。
用于创建隧道的函数是
const tls = require('tls');
const net = require('net');
var creations = 0; // a running count of the number of open connections, when it becomes 0, the tunnel is closed.
var server; // a server listening for certificate requests from the gateway server
exports.create = function(port, options, callback) {
if(creations == 0) {
creations++;
//server not currently running, create one
server = net.createServer(function (conn) {
connectFarside(conn, options, function(err, socket) {
socket.pipe(conn);
conn.pipe(socket);
});
});
server.listen(port, function(){
callback();
});
} else{
//server already running
creations++;
callback()
}
};
function connectFarside(conn, options, callback) {
try {
var socket = tls.connect(options, function() {
callback(null, socket);
});
socket.on('error', function(err){
console.log('Socket error: ' + JSON.stringify(err));
});
} catch(err) {
callback(err);
}
};
exports.close = function(){
creations--;
if(creations == 0){
// close the server if this was
// the only connections running on it
server.close();
}
}
我得到的结果是我的本地网络。
要让您的应用程序连接到 Secure Gateway,它只需要使用您的目的地提供的云 host:port。要接受连接,您需要将 Secure Gateway 客户端 运行 放在可以访问您的数据库的位置。
例如,如果我想连接到我本地计算机上的 Mongo 数据库 运行,我可以创建一个目标,并将资源主机名设置为 localhost
并将资源端口设置为 27017
。创建此目的地后,将为其分配一个云 host:port(例如,cap-sg-prd-3.integration.ibmcloud.com:23432
)。
如果我的应用程序通常使用 mongodb://localhost:27017/myproject
之类的连接字符串连接到 Mongo,我会将其更改为 mongodb://cap-sg-prd-3.integration.ibmcloud.com:23432/myproject
,以便通过 Secure Gateway 路由连接。