我是的新手,我正在使用this library连接到CasparCG server
(TCP连接)。现在,我试图创建一些类型的错误处理,并且我有两个部分的问题。TCP连接丢失后的Node.js头部错误
我连接正常,我的用户界面显示连接已建立。然后出于测试目的,我重新启动服务器导致连接丢失。我在我的控制台得到这个消息:
_http_outgoing.js:335
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11)
at ServerResponse.header (C:\www\node- test\node_modules\express\lib\response.js:718:10)
at ServerResponse.send (C:\www\node-test\node_modules\express\lib\response.js:163:12)
at ServerResponse.json (C:\www\node-test\node_modules\express\lib\response.js:249:15)
at null.<anonymous> (C:\www\node-test\api\caspar.js:33:44)
at emit (events.js:104:17)
at Socket.<anonymous> (C:\www\node-test\node_modules\caspar-cg\lib\connection.js:60:9)
at Socket.emit (events.js:129:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:991:10)
Program node server.js exited with code 1
路线:
var CasparCG = require('caspar-cg');
var ccg = new CasparCG("192.168.1.100", 5250);
var _cg_connected = false;
ccg.on('connected', function() {
_cg_connected = true;
});
ccg.on('error', function (error) {
_cg_connected = false;
console.log(error);
});
ccg.on('connectionError', function (error) {
_cg_connected = false;
console.log(error);
});
ccg.on('end', function() {
_cg_connected = false;
console.log('Connection ended');
});
ccg.on('close', function() {
_cg_connected = false;
console.log('Connection closed');
});
module.exports = function(router, connection) {
router.post('/casparcg/connect', function(req, res) {
if(_cg_connected) {
return res.status(200).json({success: true, message: 'Connection already established'});
}
ccg.connect(function() {
if(_cg_connected) {
return res.status(200).json({success: true, message: 'Connection established'});
} else {
return res.status(503).json({success: false, message: 'Connection failed'});
}
});
});
}
现在我怎样才能真正抓住这个“连接丢失”错误或任何没有它导致崩溃并重新启动?
我的第二个问题:
我的应用程序使用的node.js在AngularJS前的REST API。我可以为AngularJS创建一些类型的侦听器,它捕获node.js发送一条消息“我们失去了连接,让你知道”,AngularJS可以适当调整,这意味着我可以关闭变量connection = false
并相应地设置按钮。
编辑:
发现代码中的一个错误。移动路由器外部的侦听器上的所有TCP,只留下连接(回调)。它现在会在重新启动时自动重新连接,但会在完全断开连接时记录一个错误。
您是对的。我实际上调整了将.on()函数移动到路由之外的代码,因为它们不需要“重新建立”。连接路由现在只会尝试连接,如果连接已经连接,则返回true。它现在在重新启动时重新连接,并且在关闭服务器时不会崩溃。它记录一个超时,但我可以以某种方式捕获并发送给Angular? – Rcls
可以以某种方式捕获并将其发送给Angular? 你可以用websockets ... –
是的,谢谢!这实际上是解决方案。我已经开始工作了。 – Rcls