1. 程式人生 > >《了不起的 nodejs》中 TwitterWeb 案例 bug 解決

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

src () 哈哈 我們 做出 title div client sum

了不起的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(){
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 })
技術分享

最終結果就是這樣子

技術分享

是不是很酷,雖然是一個很簡單的小例子,不過對於初學者來說還是很有成就感的!

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