我正在創建一個網站,涉及用戶按下一個按鈕,它執行一個http請求到我的節點服務器。從那裏,我的節點服務器使用「net.Socket()」打開一個TCP套接字。之後,我使用res.send(「ok」)成功發送郵件後發送回覆。當用戶多次按下它時,我會看到下面的錯誤。另外,當我與TCP通信的服務器不可用時,也會出現同樣的問題。有沒有辦法阻止來自用戶的多個請求,或者當TCP服務器不可用時崩潰我的節點服務器?節點js,來自前端的TCP請求導致崩潰
Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11)
at ServerResponse.header (/Users/kevin/Documents/mic/node_modules/express/lib/response.js:719:10)
at ServerResponse.send (/Users/kevin/Documents/mic/node_modules/express/lib/response.js:164:12)
at ServerResponse.json (/Users/kevin/Documents/mic/node_modules/express/lib/response.js:250:15)
at ServerResponse.send (/Users/kevin/Documents/mic/node_modules/express/lib/response.js:152:21)
at /Users/*****/Documents/***/routes/***.js:275:15
at Socket.<anonymous> (/Users/*****/Documents/***/routes/***.js:829:5)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at TCP._handle.close [as _onclose] (net.js:492:12)
我的功能
tcp_client_send('***.***.*.***', 3000, server, function(err, data){
if(err){
logger.log('error', err);
return next("err_msg");
}
else{
logger.log('info', 'Successfully sent message.');
res.send("ok);
}
});
//TCP Client send
function tcp_client_send(ip, port, data, cb) {
var client = new net.Socket();
var message;
client.connect(port, ip, function() {
client.write(JSON.stringify(data));
client.destroy();
});
client.on('data', function(data){
message = data.toString();
});
client.on('close', function(){
cb(null, message);
});
client.on('error', function(err) {
client.destroy();
cb(err, null);
});
}
問題可能在這裏:'client.write(JSON.stringify(data)); client.destroy();'因爲'write'是異步的。嘗試銷燬寫入回調函數中的客戶端。 –