nodejs不会在Java程序成功发送POST时始终触发'data'事件

时间:2012-05-08 08:45:08

标签: java json http node.js post

我写了一些代码来定期将数据发布到NodeJs程序,该程序监听POST并打印数据。但是,有时在标题上会通过,有时标题和正文都可以通过。这是发布数据的Java代码:

JSONObject dataObject = new JSONObject();
dataObject.put("test", "true");
URLConnection urlConn = thisSubUrl.openConnection();
urlConn.setDoInput (true);
urlConn.setDoOutput(true);
urlConn.setUseCaches (false);
urlConn.setRequestProperty("Content-Type", "application/json");
OutputStreamWriter wr = new OutputStreamWriter(urlConn.getOutputStream());
String dataStr = dataObject.toString();
wr.write(dataStr, 0, dataStr.length());
wr.flush();
wr.close();

BufferedReader in = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
in.close();

服务器代码如下所示:

var server= http.createServer(function(req,res){
req.setEncoding('utf8');
console.log(req.headers);
req.on('data', function(chunk) {
          console.log("Receive_Event::" + chunk);
         });
req.on('end', function() {
    console.log('on end');
});

console.log("Bytes received: " + req.socket.bytesRead);
if(req.method=='POST'){
    handlePost(req,res);
} else{
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end();
}
}).listen(1338, "127.0.0.1");

标题始终打印出来。接收的字节数长度不同,在标头中的字节数和标题中的字节数+主体长度之间。

为什么会这样?

1 个答案:

答案 0 :(得分:1)

可能发生的事情是,在收到所有“数据”块之前,您将发出res.end()(不知道handlePost实际上做了什么)。你应该在“结束”事件中调用所有额外的逻辑

var server= http.createServer(function(req,res){
    req.setEncoding('utf8');

    console.log(req.headers);

    req.on('data', function(chunk) {
        console.log("Receive_Event::" + chunk);
    });

    req.on('end', function() {
        console.log('on end');
        console.log("Bytes received: " + req.socket.bytesRead);
        if(req.method=='POST'){
            handlePost(req,res);
        } else{
            res.writeHead(200, {'Content-Type': 'text/plain'});
            res.end();
        }
    });


}).listen(1338, "127.0.0.1");