- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在使用 http.request 发出客户端请求时遇到了一些错误( Node v0.6.18,v0.6.3),以下代码产生了错误,我有一些疑问。
var http = require('http');
var url = require('url');
http.createServer(function(req, res) {
var data = '多情自古空余恨';
res.writeHead(200, {
'Content-Type': 'text/plain',
'Content-Length': 1 //ERROR
});
res.end(data);
}).listen(3000);
function request(options, callback) {
var req = http.request(options, function(res) {
var data = '';
res.setEncoding = 'utf8';
res.on('data', function(chunk) {
data += chunk;
});
res.on('error', function(err) {
callback(new Error('res error: ' + err));
});
res.on('end', function() {
console.log('res on end');
callback(null, data);
});
});
req.on('socket', function(socket) {
socket.on('error', function(err) {
console.log('socket on error');
callback('socket error: ' + err);
req.abort();
});
});
req.end();
}
request({
host: 'localhost',
port: 3000,
method: 'GET'
}, function(err, data) {
console.log('result, err: ' + err + ', data: ' + data);
});
输出:
res on end
result, err: null, data: �
socket on error
result, err: socket error: Error: Parse Error, data: undefined
这是我的问题:
我需要你的帮助!谢谢。
===============================
我发现相同的代码输出:
res on end
result, err: null, data: �
在 Node v0.6.6 和 v0.6.11 中。为什么?
最佳答案
因为有一个内容长度为 1 的 header ,当 request
刚好接收到 1 个八位字节的数据时,它会假定这就是全部并触发 end
回调。之后,接收到套接字不知道如何处理的更多数据,因此它会引发错误。
要解决此问题,您或许可以等待一小段时间,然后再触发成功的回调并跟踪它是否已被触发。例如:
var req = http.request(options, function(res) {
var data = '';
res.setEncoding = 'utf8';
res.on('data', function(chunk) {
data += chunk;
});
res.on('error', function(err) {
if(!callback.called) { // check before firing the callback
callback(new Error('res error: ' + err));
callback.called = true; // set after firing the callback
} // ..
});
res.on('end', function() {
process.nextTick(function() { // use setTimeout if nextTick is too short
if(!callback.called) { //..
console.log('res on end');
callback(null, data);
callback.called = true; // ..
} // ..
}); // ..
});
});
req.on('socket', function(socket) {
socket.on('error', function(err) {
if(!callback.called) { // ..
console.log('socket on error');
callback('socket error: ' + err);
callback.called = true; // ..
} // ..
req.abort();
});
});
req.end();
(我试图在所有新行之后添加注释,使它们突出一点。)
关于javascript - nodejs 错误 : Parse Error at Socket. ondata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10838186/
我有一个 Gridview,其适配器基于我的 MineSweeper 游戏的 Tile 类型的 pojo 列表,我正在做一些单元测试,我想做的就是单击所有没有地雷的 gridview 项目,然后长按所
我有一个 Activity 与 ListView (id: android.R.id.list)。 ListView 显示来自自定义适配器的信息,我想使用 Espresso 单击特定项目中的特定 Vi
我现在有点不知所措。我有一些代码可以在数据可用时从套接字读取数据,但目前它在一个单独的线程上的 while 循环中,并且由于没有可用数据而在函数返回时消耗 50% 的 CPU。我真正想要的是 Sock
我正在尝试验证 ListView 不包含特定项目。这是我正在使用的代码: onData(allOf(is(instanceOf(Contact.class)), is(withContactItemN
我制作了一个简单的 NodeJS TCP 服务器,Java 客户端发送图像: encodedImage = out.write("IMG;" + encodedImage); out.flush()
我正在尝试访问一个 View 的 subview 。这是我目前正在尝试开始工作的路线。 onData(withDesc("Description")).onChildView(withId(R.id.
在nodejs应用程序中,我需要生成一个子进程,并将stdio设置为“继承”模式,所以基本上: var child = spawn('some/command', [], { stdio: [pr
我一直在开发一种使用 WebRTC 在浏览器和 native 客户端之间交换音频的产品, native 端是用 C++ 实现的。目前我已经构建了 webRtc 的最新稳定版本(分支:branch-he
在使用 Facebook graph api 时,我使用 https.get 来请求 facebook 用户数据。 var optionsP = { host: 'graph.face
我在使用 http.request 发出客户端请求时遇到了一些错误( Node v0.6.18,v0.6.3),以下代码产生了错误,我有一些疑问。 var http = require('http')
我正在尝试在将 Node.js http 流发送到解析器之前对其进行编辑。我已经实现了以下代码 //catch any connection event to this server server.o
我有一个命令行 Dart 脚本客户端通过 [dart:io] websocket 与 Jetty 服务器进行交互。我已经实现了一个自定义消息子协议(protocol),它使用反射(双方)使用二进制编码
我有一个app,有ListView,我想找LinearLayout,id=order_untake_jijia_listview_jia 代码是: onData(withClassName(endsW
我是一名优秀的程序员,十分优秀!