2016-10-18 3 views
0

Я пытаюсь использовать именованные каналы в своем приложении. Проблема заключается в том, когда я пытаюсь подключиться к названной трубе перед тем как сервер работает, я получаю следующее сообщение об ошибке:Узел JS обнаруживает, существует ли именованный канал

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

ответ

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)); 
}); 
Смежные вопросы