了不起的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(res){
  11. res.setEncoding('utf8');
  12. /*==========新增代码=========*/
  13. res.on("data",function(chunk){
  14. //console.log(chunk);
  15. });
  16. /*==========================*/
  17. res.on('end',function(){
  18. console.log('\n \033[90m request complete!\033[39m' );
  19. process.stdout.write('\n your name: ');
  20. });
  21. }).end(qs.stringify({name: theName}));
  22. }
  23.  
  24. process.stdout.write('\n your name: ');
  25. process.stdin.resume();
  26. process.stdin.setEncoding('utf8');
  27. process.stdin.on('data',function(name){
  28. send(name.replace('\n', ''));
  29. });

最终结果就是这样子

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

《了不起的 nodejs》中 TwitterWeb 案例 bug 解决的更多相关文章

  1. Kali Linux 2017中Scapy运行bug解决

    Kali Linux 2017中Scapy运行bug解决   Scapy是一款强大的网络数据包构建工具.在Kali Linux 2017中,当在scapy的命令行中,运行res.graph()生成图形 ...

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

    了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落. 现在我们看一下第七章HTTP,一个Twitter Web客户端 ...

  3. nodejs中express安装失败解决方法

    http://jingyan.baidu.com/article/922554468a3466851648f419.html

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

    开发前端的同学一定都知道,IE6是兼容BUG最多的浏览器,它不支持PNG alpha通道暂且不论.其文档的解析理解规范也引起了诸多恼人的BUG,有时甚至让人感到绝望.本文主要讲解一些比较容易遇到的IE ...

  5. 在TFS中通过程序动态创建Bug并感知Bug解决状态

    为便于跟踪问题解决情况,预警引擎产生的比较严重的预警日志,需要在TFS中登记Bug,通过TFS的状态流转,利用TFS Bug的Web挂钩功能,动态感知Bug解决状态,从而跟踪预警问题的解决状态, 整体 ...

  6. 解决nodejs中json序列化时Date类型默认为UTC格式

    在nodejs中,json序列化时Date类型时,默认转为UTC格式. 如下图 上面只是一个例子,下面我用一个更具体化的例子来展示一个这个情况,我们在开发WEB项目中,经常用到Express组件, 我 ...

  7. 解决nodejs中json序列化时Date类型为UTC格式

    在nodejs中,json序列化时Date类型时,默认转为UTC格式. 如下图 zhupengfei@DESKTOP-HJASOE3 MINGW64 /d/MyProject/exp2 $ node ...

  8. nodeJS中的包

    前面的话 Node组织了自身的核心模块,也使得第三方文件模块可以有序地编写和使用.但是在第三方模块中,模块与模块之间仍然是散列在各地的,相互之间不能直接引用.而在模块之外,包和NPM则是将模块联系起来 ...

  9. Nodejs中的路径问题

    一.path核心模块 ①path.basename(path[,ext])获取一个路径中的文件名 var path=require('path'); console.log(path.basename ...

随机推荐

  1. (后端)Mybatis中#{}和${}传参的区别及#和$的区别小结(转)

    原文地址:https://www.cnblogs.com/zqr99/p/8094234.html 最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, ...

  2. Scala之Calendar,SimpleDateFormat简单用法

    package com.dingxin.entrance import java.text.SimpleDateFormat import java.util.{Calendar, Date} /** ...

  3. 通过http上下文判断是否是Ajax请求

    using System; namespace System.Web.Mvc { /// <summary>Represents a class that extends the < ...

  4. Python比较(关系)运算符

    比较(关系)运算符 运 算 符 作 用   举 例  结 果  >  大于 'a'>'b'   False  <  小于  156<456  True  ==  等于  'c' ...

  5. Linux CFS调度器之task_tick_fair处理周期性调度器--Linux进程的管理与调度(二十九)

    1. CFS如何处理周期性调度器 周期性调度器的工作由scheduler_tick函数完成(定义在kernel/sched/core.c, line 2910), 在scheduler_tick中周期 ...

  6. echo 在shell及脚本中显示色彩及闪烁警告效果

    在shell脚本编写中,echo用于输出字符串等提示信息,当我们需要格外显示色彩及闪烁效果如下: 一.在执行shell中显示色彩: 语法格式: echo -e "\033[颜色1:颜色2m ...

  7. java求解第N个素数(质数)

    面试中,遇到一个题目:求解第N个素数. import java.util.Scanner; public class GetPrimeNumber { public static int NthPri ...

  8. Alpha阶段 - 博客链接合集

    Alpha阶段 - 博客链接合集 项目Github地址 安卓端(Stardust):https://github.com/StardustProject/Stardust 服务器端(Gravel):h ...

  9. 【shell脚本】shell脚本实现的 函数差集查找

    文本地址 点击关注微信公众号 wenyuqinghuai 分享提纲: 1. 问题背景 2. 代码实现 1.问题背景 在做公司的测试的自动化测试时,覆盖了一些开发代码的函数,但是那些还没有做,使用一个函 ...

  10. Linux 基本操作--文件查看 (day3)

    一.查看文件-----cat (详情参考:http://blog.sina.com.cn/s/blog_52f6ead0010127xm.html) 语法结构: cat 查看方式 文件 cat  -A ...