Node JS检测命名管道是否存在

Node JS detect if named pipe exists

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

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));

使用 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));
});

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