《了不起的 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-07 16:58:39

《了不起的 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

Nodejs express中创建ejs项目,解决express下默认创建jade,无法创建ejs问题

最近在看<Node.js开发指南>,看到使用nodejs进行web开发的时候,准备创建ejs项目遇到问题了, 书上命令为: ? 1 express -t ejs microblog 可是执行后,仍旧创建的是jade项目. 原来,express3.x,express4.x中创建ejs命令更新为: express -e microblog //即ejs,-j(即jade)  当然,最直接的,你也可以修改package.json里的定义来实现安装ejs. PS:建立工程过程 1.必须得安装expre

IE6中的常见BUG与相应的解决办法

开发前端的同学一定都知道,IE6是兼容BUG最多的浏览器,它不支持PNG alpha通道暂且不论.其文档的解析理解规范也引起了诸多恼人的BUG,有时甚至让人感到绝望.本文主要讲解一些比较容易遇到的IE6BUG,以及解决的办法. 一.IE6双倍边距bug 当页面上的元素使用float浮动时,不管是向左还是向右浮动:只要该元素带有margin像素都会使该值乘以2,例如“margin-left:10px” 在IE6中,该值就会被解析为20px.想要解决这个BUG就需要在该元素中加入display:in

nodeJS中的包

前面的话 Node组织了自身的核心模块,也使得第三方文件模块可以有序地编写和使用.但是在第三方模块中,模块与模块之间仍然是散列在各地的,相互之间不能直接引用.而在模块之外,包和NPM则是将模块联系起来的一种机制.在介绍NPM之前,不得不提起CommonJS的包规范.JavaScript不似Java或者其他语言那样,具有模块和包结构.Node对模块规范的实现,一定程度上解决了变量依赖.依赖关系等代码组织性问题.包的出现,则是在模块的基础上进一步组织JavaScript代码.CommonJS的包规范

nodeJS中的包 npm install http://www.cnblogs.com/xiaohuochai/archive/2017/05/20/6882027.html

前面的话 Node组织了自身的核心模块,也使得第三方文件模块可以有序地编写和使用.但是在第三方模块中,模块与模块之间仍然是散列在各地的,相互之间不能直接引用.而在模块之外,包和NPM则是将模块联系起来的一种机制.在介绍NPM之前,不得不提起CommonJS的包规范.JavaScript不似Java或者其他语言那样,具有模块和包结构.Node对模块规范的实现,一定程度上解决了变量依赖.依赖关系等代码组织性问题.包的出现,则是在模块的基础上进一步组织JavaScript代码.CommonJS的包规范

nodejs(第三篇):nodejs中的文件模块、nodejs中的require与exports、http模块补充、JavaScript Standard Style

一.nodejs中的文件模块 在nodejs中,用户自己编写的模块,称为文件模块. 文件模块,则是指js文件.json文件或者是.node文件.在引用文件模块的时候后要加上文件的路径:/.../.../xxx.js表示绝对路径../xxx.js表示相对路径(同一文件夹下的xxx.js),../表示上一级目录.如果既不加/.../.../又不加./的话,则该模块要么是核心模块,要么是从一个node_modules文件夹加载. (1)在Node.js中,require是一个方法,只有通过requir

QT环境搭建常见的bug解决 --&gt;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/目录下,可以通过如下命令手动编

Node.js(十二)——NodeJs中的Promise

爬虫基于回调和事件的方式去实现,回调也是被诟病已久的问题尤其是callback这种,无论是阅读还是调试都很费劲,甚至我们连代码的堆栈都看不到,这是一种反人类的写法,Promise来拜托这种痛苦的方式 传统方式实现动画效果: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Promise animation</title> <style&g

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