zoukankan      html  css  js  c++  java
  • 《了不起的 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('
    ', ''));
    });

    最终结果就是这样子

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

  • 相关阅读:
    表、栈和队列
    POJ 1207 The 3n + 1 problem
    记录一个很低级的错误:command 'usr/local/cuda/bin/vncc' failed with exit status 2
    [转载]Benchmark和baseline的区别
    [转载]神经网络架构搜索(Neural Architecture Search)杂谈
    CNN常用图片分类网络
    [转载]OCR原理
    目标检测、实例分割学习
    [转载]上采样
    自动驾驶资料收集
  • 原文地址:https://www.cnblogs.com/nzbin/p/5732758.html
Copyright © 2011-2022 走看看