《了不起的 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('\n got name \033[90m' + qs.parse(body).name + '\033[39m\n');
        
    });
}).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('\n  \033[90m  request complete!\033[39m' );
                process.stdout.write('\n your name: ');
            });
        }).end(qs.stringify({name: theName}));
}

process.stdout.write('\n your name: ');
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data',function(name){
    send(name.replace('\n', ''));
});
复制代码

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

效果非常不理想

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

其实只需要将 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('\n  \033[90m  request complete!\033[39m' );
                process.stdout.write('\n your name: ');
            });
        }).end(qs.stringify({name: theName}));
}

process.stdout.write('\n your name: ');
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data',function(name){
    send(name.replace('\n', ''));
});
复制代码

最终结果就是这样子

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

posted @   叙帝利  阅读(611)  评论(2编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示