【发布时间】:2016-12-12 09:44:36
【问题描述】:
我有一个 node.js 脚本,其中包含两件事:
- 启动一个 http 服务器,监听来自浏览器的 POST 请求。
- 启动套接字连接到 java 服务器
当来自浏览器的请求时,我会使用套接字将一些数据发送到 java 服务器,然后将数据从 java 服务器以 http 响应返回给浏览器。
第一个请求可以正常工作,但在第二个请求中我会收到错误:
Error: Can't set headers after they are sent.
这里是 node.js 脚本:
var client = new net.Socket();
var clientConnected = false;
app.options('*', cors());
app.use(function(req, res, next) {
var data = new Buffer('');
req.on('data', function(chunk) {
// read buffer data from the browser in the POST request
data = Buffer.concat([data, chunk]);
});
req.on('end', function() {
req.rawBody = data;
next();
});
});
app.post('/xxxxxx', function(req, res) {
res.header("Access-Control-Allow-Origin", "*");
if (!clientConnected) {
// if the socket is not connected, create it
client.connect(G_PORT, G_ADDRESS, function() {
clientConnected = true;
});
client.on('close', function() {
clientConnected = false;
});
client.on('data',function(data) {
// get result from the java server through socket
res.send(data);
});
client.on('error', function(error){
clientConnected = false;
});
res.send();
}
else {
// the socket is created, just send the data to socket
client.write(req.rawBody);
}
});
错误指向了这一行:
res.send(data);
在
client.on('data',function(data)
我对表达很陌生,希望有人能给我一些建议,谢谢:)
更新:
我尝试在每次完成一个请求时关闭套接字,在这种情况下一切正常:
if (true) {
var client = new net.Socket();
client.connect(G_PORT, G_ADDRESS, function() {
client.write(data);
});
client.on('close', function(){
});
client.on('data',function(data){
res.send(decodeData);
client.destroy();
});
client.on('error', function(error){
});
}
似乎问题与我的全局套接字实例有关???
【问题讨论】:
标签: javascript node.js sockets express