前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《了不起的 nodejs》中 TwitterWeb 案例 bug 解决

《了不起的 nodejs》中 TwitterWeb 案例 bug 解决

作者头像
叙帝利
发布2018-01-17 16:35:03
6240
发布2018-01-17 16:35:03
举报
文章被收录于专栏:前端新视界前端新视界

了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落。

现在我们看一下第七章HTTP,一个Twitter Web客户端的例子。

先贴上书中源码

1.创建server.js

代码语言:javascript
复制
 1 var qs = require('querystring');
 2 require('http').createServer(function(req,res){
 3     var body ="";
 4     req.on('data',function(chunk){
 5         body += chunk;
 6     });
 7     req.on('end',function(){
 8         res.writeHead(200);
 9         res.end('Done');
10         console.log('\n got name \033[90m' + qs.parse(body).name + '\033[39m\n');
11         
12     });
13 }).listen(3000);

2.创建client.js

代码语言:javascript
复制
 1 var http = require('http'),
 2         qs = require('querystring');
 3 
 4 function send (theName){
 5     http.request({
 6         host: '127.0.0.1',
 7         port: 3000,
 8         url: '/',
 9         method:'POST'
10         },function(res){
11             res.setEncoding('utf8');
12             res.on('end',function(){
13                 console.log('\n  \033[90m  request complete!\033[39m' );
14                 process.stdout.write('\n your name: ');
15             });
16         }).end(qs.stringify({name: theName}));
17 }
18 
19 process.stdout.write('\n your name: ');
20 process.stdin.resume();
21 process.stdin.setEncoding('utf8');
22 process.stdin.on('data',function(name){
23     send(name.replace('\n', ''));
24 })

很遗憾,最后出来的结果是这样子

效果非常不理想

问题出在哪里呢,和源码一样啊?

哈哈,其实只需要将 client.js 中发送用户名的回调函数修改一下就可以了。

代码语言:javascript
复制
 1 var http = require('http'),
 2         qs = require('querystring');
 3 
 4 function send (theName){
 5     http.request({
 6         host: '127.0.0.1',
 7         port: 3000,
 8         url: '/',
 9         method:'POST'
10         },function(){
11             // res.setEncoding('utf8');
12             // res.on('end',function(){
13                 console.log('\n  \033[90m  request complete!\033[39m' );
14                 process.stdout.write('\n your name: ');
15             // });
16         }).end(qs.stringify({name: theName}));
17 }
18 
19 process.stdout.write('\n your name: ');
20 process.stdin.resume();
21 process.stdin.setEncoding('utf8');
22 process.stdin.on('data',function(name){
23     send(name.replace('\n', ''));
24 })

最终结果就是这样子

是不是很酷,虽然是一个很简单的小例子,不过对于初学者来说还是很有成就感的!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档