节点JS检测命名管道是否存在

时间:2016-10-18 20:58:41

标签: node.js error-handling connection named-pipes

我正在尝试在我的应用程序中使用命名管道。问题是当我在服务器运行之前尝试连接到命名管道时,我收到以下错误:

events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: connect ENOENT \\?\pipe\\testpipe
    at Object.exports._errnoException (util.js:870:11)
    at exports._exceptionWithHostPort (util.js:893:20)
    at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1062:14)

如何在尝试连接之前检查管道是否存在?

注意:try-catch中包装我的连接代码并不能防止错误。

这是我的代码:

var net = require('net');

var addr = '\\\\?\\pipe\\testpipe';
var client = net.createConnection({ path: addr }, function() {
    console.log("Connected");
    client.on('data', function(data) {
        console.log("Recieved: " + data);
    });
    client.on('error', function(){
        console.log(arguments);
    });
}.bind(this));

2 个答案:

答案 0 :(得分:0)

使用domain模块可防止致命错误。以下代码可用于安全地运行连接代码。

不是我所希望的,而是封闭的解决方案,因为没有答案。

var net = require('net');
var domain = require('domain');

var addr = '\\\\?\\pipe\\testpipe';

var d = domain.create();
d.on('error', function(err) {
    console.error(err);
});

d.run(function() {
    var client = net.createConnection({ path: addr }, function() {
        console.log("Connected");
        client.on('data', function(data) {
            console.log("Recieved: " + data);
        });
        client.on('error', function(){
            console.log(arguments);
        });
    }.bind(this));
});

答案 1 :(得分:0)

制作套接字,然后听取error事件,然后调用connect,它就不会被抛出:https://nodejs.org/api/net.html#net_event_error_1