了不起的nodejs-TwitterWeb案例bug解决

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

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

先贴上书中源码

1.创建server.js

 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

 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 中发送用户名的回调函数修改一下就可以了。

 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 })

最终结果就是这样子

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

时间: 2024-08-29 22:03:01

了不起的nodejs-TwitterWeb案例bug解决的相关文章

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

了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落. 现在我们看一下第七章HTTP,一个Twitter Web客户端的例子. 先贴上书中源码 1.创建server.js 1 var qs = require('querystring'); 2 require('http').createServer(function(req,res){ 3 var body =""; 4 req.on('data',f

QT环境搭建常见的bug解决 -->ld: cannot find –lbootstrap 错误

常见错误列表 一.编译arm环境的时候: ./configure -prefix $HOME/Qtenv/arm -embedded arm-nomake docs -nomake demo -nomake examples 1.configure完成之后,make出现问题:/usr/bin/ld: cannot find –lbootstrap 错误 解决方法:提示找不到bootstrap库,而实际的qt中是由这个库的,就在src/tools/bootstrap/目录下,可以通过如下命令手动编

IE6 Bug解决方法HACK汇总

1.终极方法:条件注释<!--[if lte IE 6]> 这段文字仅显示在 IE6及IE6以下版本. <![endif]--><!--[if gte IE 6]> 这段文字仅显示在 IE6及IE6以上版本. <![endif]--><!--[if gt IE 6]> 这段文字仅显示在 IE6以上版本(不包含IE6). <![endif]--><!--[if IE 5.5]> 这段文字仅显示在 IE5.5. <![e

艺术控件RecyclerView的分隔线&amp;bug解决

前言 RecyclerView是Google在support-v7里面添加的控件,是5.0 Material Design模式下的一员,在众多的App中使用非常频繁,之前是ListView现在是RecyclerView,想比之下RecyclerView更加的灵活,高内聚低耦合,将ListView功能进行了拆分,各个类各司其职构成了现在的RecyclerView. 效果~ Part 1.LinearLayoutAppCompat源码分析 在使用RecyclerView的分割线之前,不得不介绍一下L

img标签下多余空白BUG解决方法

在进行页面的DIV CSS排版时,遇到IE6(当然有时Firefox下也会偶遇)浏览器中的图片元素img下出现多余空白的问题绝对是常见的 对于该问题的解决方法也是“见机行事”. 1.将图片转换为块级对象 即,设置img为“display:block;”.在本例中添加一组CSS代码:“#sub img {display:block;}”. 2.设置图片的垂直对齐方式 即设置图片的vertical-align属性为“top,text-top,bottom,text-bottom”也可以解决.如本例中

NK bug解决

K2  新ARM用了自己的程序,其中K2是单can, 不用转换,Arm是双Can 需要转换, Can的发送,是已每一帧报文发送的,每一帧的前八个字节都是通过,查询方式,发送的,如果每一帧的字节数大约8字节的话,后面的字节由查询方式做判断 剩下的字节有中断发送, BUG1:新ARM   双Can之间装换的时候,gNODataCounter  这个变量时公用的,所有每个can接受中断都会修改它,导致双can的切换时间不准,修改为两个两边,g1NoDataCounter 和g2NoDataCounte

错误BUG解决:Can&#39;t create handler inside thread that has not called Looper.prepare()

我在自定义ContentProvider中,遇到了这个错误: 原因在于: 我在要分享数据的程序中创建数据库的弹出了一个土司,这个土司在主线程中,在第二个程序中,向数据库中添加数据的时候导致其挂了. 切记:不要在主线程中更新UI. 错误BUG解决:Can't create handler inside thread that has not called Looper.prepare()

Android较低版本(&lt;5.2) 页面默认Select选择框效果的BUG解决

Bug描述: 使用低版本安卓(<5.2),在微信上打开网页,点击下拉框,会出现如下图所示的用来展示select选项的弹出框: 在选项较少的时候,可以向下滑动,将选项滑到底部 滑动前: 滑动后: 期望达到的效果: 解决方案: 判断是否是微信环境: function isWeixinBrowser(){ return /micromessenger/.test(navigator.userAgent.toLowerCase()); } 判断安卓版号: var userAgent = navigato

dede留言板BUG解决

dede留言板刷新后空白BUG解决 DEDE留言板验证码留空或者不正确返回空白页面的解决方法 解决方法如下进入文件/plus/guestbook.php 找到代码ShowMsg("验证码不正确!",""); 改为ShowMsg("验证码不正确!","-1"); OK! 解决织梦DedeCMS留言板模块留言无法审核的问题 第一.无法控制留言是否需要审核的开关.这个一般情况下是在“系统基本参数”菜单下的“互动设置”选项里面,如果没