【发布时间】:2016-04-10 19:57:26
【问题描述】:
我是Node.js 的新手,我正在使用this library 连接到CasparCG server(TCP 连接)。现在,我正在尝试创建某种类型的错误处理,我有一个两部分的问题。
我连接正常,我的 UI 显示连接已建立。然后出于测试目的,我重新启动服务器导致连接丢失。我在控制台中收到此消息:
_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' 监听器移到路由之外,只留下 connect(callback) 那里。它现在会在重新启动时自动重新连接,但会在完全断开连接时记录错误。
【问题讨论】:
标签: angularjs node.js sockets tcp