• 《了不起的 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('
     got name 33[90m' + qs.parse(body).name + '33[39m
    ');
    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('
      33[90m  request complete!33[39m' );
    14                 process.stdout.write('
     your name: ');
    15             });
    16         }).end(qs.stringify({name: theName}));
    17 }
    18 
    19 process.stdout.write('
     your name: ');
    20 process.stdin.resume();
    21 process.stdin.setEncoding('utf8');
    22 process.stdin.on('data',function(name){
    23     send(name.replace('
    ', ''));
    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('
      33[90m  request complete!33[39m' );
    14                 process.stdout.write('
     your name: ');
    15             // });
    16         }).end(qs.stringify({name: theName}));
    17 }
    18 
    19 process.stdout.write('
     your name: ');
    20 process.stdin.resume();
    21 process.stdin.setEncoding('utf8');
    22 process.stdin.on('data',function(name){
    23     send(name.replace('
    ', ''));
    24 })
    复制代码

    最终结果就是这样子

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

  • 相关阅读:
    MyBatis之启动分析(一)
    通俗算法教程03
    数学倒底有没有绝对的严格性和形式化?
    通俗算法教程02
    .NET Core 中正确使用 HttpClient 的姿势
    通俗算法教程01
    我要写一篇文章吗?
    [ASP.NET MVC 小牛之路]18
    [ASP.NET MVC 小牛之路]17
    [ASP.NET MVC 小牛之路]16
  • 原文地址:https://www.cnblogs.com/yujihaia/p/7417165.html
Copyright © 2020-2023  润新知