问题描述
从Node.js向Jetty发送REST(POST)请求时遇到问题,当我从REST客户端发送相同请求时,它可以正常工作。 这是节点js代码:
var postheaders = {
'Content-Type' : 'application/json',
'Content-Length' : Buffer.byteLength(jsonObject, 'utf8')
};
var optionsPost = {
host : '127.0.0.1', // here only the domain name
// (no http/https !)
port : 8080,
path : '/external/session', // the rest of the url with parameters if needed
method : 'POST', // do GET
headers :postheaders
};
console.info('Options prepared:');
console.info(jsonObject);
console.info('Do the POST call');
var reqPost = https.request(optionsPost, function(res) {
console.log("statusCode: ", res.statusCode);
// uncomment it for header details
// console.log("headers: ", res.headers);
res.on('data', function(d) {
console.info('POST result:\n');
process.stdout.write(d);
resp.contentType('application/json');
resp.send(d);
console.info('\n\nCall completed');
});
});
reqPost.end();
reqPost.on('error', function(e) {
console.error(e);
});
};
这是Jetty中的错误:
Jul 30, 2015 4:18:58 PM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SEVERE: The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container
java.io.IOException: java.util.concurrent.TimeoutException: Idle timeout expired: 30001/30000 ms
at org.eclipse.jetty.util.SharedBlockingCallback$Blocker.block(SharedBlockingCallback.java:234)
at org.eclipse.jetty.server.HttpInputOverHTTP.blockForContent(HttpInputOverHTTP.java:67)
at org.eclipse.jetty.server.HttpInput$1.waitForContent(HttpInput.java:500)
有人可以帮我解决这个问题吗? 谢谢
1楼
您没有发送任何响应内容,并且Jetty正在等待数据,直到发生超时。
要发送数据,请在reqPost.end()
之前调用reqPost.write(...your data...)
reqPost.end()
。