nodejs用http模块写的简单程序,服务器端获取客户端发送名字发生的问题,为何此处代码没有运行到,求解答?
代码运行后,第一次客户端上有显示your name: ,第一次之后再输其它名字时都没有显示your name: ,但是服务器端可以正常显示从客户端得到的名字。
以下是server.js代码
var qs = require('querystring');
require('http').createServer(function (req, res) {
var body = '';
req.on('data', function (chunk) {
body += chunk;
});
req.on('end', function () {
res.writeHead(200);
res.end('Done');
console.log('\n got name \033[90m' + qs.parse(body).name + '\033[39m\n');
});
}).listen(3000);
以下是client.js代码
var http = require('http'), qs = require('querystring');
function send (theName) {
http.request({ host: '127.0.0.1', port: 3000, url: '/', method: 'POST' }, function (res) {
res.setEncoding('utf8');
res.on('end', function () {
console.log('\n \033[90m✔ request complete!\033[39m');
process.stdout.write('\n your name: ');
});
}).end(qs.stringify({ name: theName }));
}
process.stdout.write('\n your name: ');
process.stdin.resume();
process.stdin.setEncoding('utf-8');
process.stdin.on('data', function (name) {
send(name.replace('\n', ''));
});
截图左边是server,右边是client。
我试着把client的这段代码删掉,结果似乎仍不影响正常运行。
res.on('end', function () {
console.log('\n \033[90m✔ request complete!\033[39m');
process.stdout.write('\n your name: ');
});
为什么这段代码没有运行到呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因
HTTP responses, on the client
是一个Readable Streams
,它的end
事件只有在数据全部被consumed
的时候才会触发. 在你的client.js
修改send
函数,添加res.on('data',...)
处理, 如果你对数据不care,也可以使用res.resume()
。 你自己选一个吧!See More
end
检测的是data
事件结束的的,所以你要表明data事件才可以的。