《了不起的 nodejs》中 TwitterWeb 案例 bug 解決
阿新 • • 發佈:2017-08-23
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 解決