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


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

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

    先贴上书中源码

    1.创建server.js

    var qs = require('querystring');
    require('http').createServer(function(req,res){
        var body ="";
        req.on('data',function(chunk){
            body += chunk;
        });
        req.on('end',function(){
            res.writeHead(200);
            res.end('Done');
            console.log('
     got name 33[90m' + qs.parse(body).name + '33[39m
    ');
            
        });
    }).listen(3000);

    2.创建client.js

    var http = require('http'),
        qs = require('querystring');
    
    function send (theName){
        http.request({
            host: '127.0.0.1',
            port: 3000,
            url: '/',
            method:'POST'
            },function(res){
                res.setEncoding('utf8');
                res.on('end',function(){
                    console.log('
      33[90m  request complete!33[39m' );
                    process.stdout.write('
     your name: ');
                });
            }).end(qs.stringify({name: theName}));
    }
    
    process.stdout.write('
     your name: ');
    process.stdin.resume();
    process.stdin.setEncoding('utf8');
    process.stdin.on('data',function(name){
        send(name.replace('
    ', ''));
    });

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

    效果非常不理想

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

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

    var http = require('http'),
        qs = require('querystring');
    
    function send (theName){
        http.request({
            host: '127.0.0.1',
            port: 3000,
            url: '/',
            method:'POST'
            },function(res){
                res.setEncoding('utf8');
                /*==========新增代码=========*/
                res.on("data",function(chunk){
                    //console.log(chunk);
                });
                /*==========================*/
                res.on('end',function(){
                    console.log('
      33[90m  request complete!33[39m' );
                    process.stdout.write('
     your name: ');
                });
            }).end(qs.stringify({name: theName}));
    }
    
    process.stdout.write('
     your name: ');
    process.stdin.resume();
    process.stdin.setEncoding('utf8');
    process.stdin.on('data',function(name){
        send(name.replace('
    ', ''));
    });

    最终结果就是这样子

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

  • 相关阅读:
    Linux 性能优化之 IO 子系统
    Percona 开始尝试基于Ceph做上层感知的分布式 MySQL 集群,使用 Ceph 提供的快照,备份和 HA 功能来解决分布式数据库的底层存储问题
    Ceph常用维护操作
    linux系统数据落盘之细节
    Ceph: validate that the RBD cache is active
    linux初始化
    GlusterFS 安装
    GlusterFS常用设置命令
    kubernetes --- Glusterfs
    kubernetes --- weave
  • 原文地址:https://www.cnblogs.com/nzbin/p/5732758.html
Copyright © 2020-2023  润新知