剛學nodejs,做到一個例子:發送簡單的HTTP請求。遇到一個問題,客戶端給服務端發送的消息到服務端,服務端收不到消息,確切的說是“”。
以下是服務端代碼:server.js
const http = require("http");
const qs = require("querystring")
http.createServer(function(request,response){
var body ="";
request.on("data",function(chunk){
body+=chunk;
})
request.on("end",function(){
response.writeHead(200,{"ContentType":"text/html;charset=utf-8"});
console.log(body)
process.stdout.write("got name :"+ qs.parse(body)["name"]+"\n")
})
}).listen(3000);
以下是客戶端代碼:
var http = require("http");
var qs = require("querystring")
var options = {
hostname: '127.0.0.1',
port: 3000,
path: '/',
method: 'POST',
};
function getname(theName){
var b = {name:theName};
var a=qs.stringify(b)
console.log(typeof theName)
console.log("theName:"+theName+" ,b轉換為string后的a:"+a);
http.request(options,function(response){
response.setEncoding('utf8');
var body ="";
response.on('data', function(chunk){
body+=chunk;
});
response.on('end',function (){
process.stdout.write("client compate!\n");
})
}).end(a);
}
//正確代碼
process.stdin.on("data",function(inputData){
process.stdout.write("your name:"+inputData);
console.log("輸入內容: "+inputData+" 轉換為string后:"+inputData.toString().replace("\r\n",""))//inputData 有回車
getname(inputData.toString().replace("\r\n",""));
})
//錯誤代碼
process.stdin.on("data",function(inputData){ process.stdout.write("your name:"+inputData); getname(inputData); })
服務端,在這里無需多說。我們看到客戶端的錯誤代碼:這里,沒有對接收到的“用戶輸入數據”的inputData處理,所以這里的inputData是Object類型;
看到客戶端反饋結果:

服務端的返回結果:

相繼查看了b的類型:

相信這里已經知道了問題的根源:獲得的參數是一個buffer類型的,導致后面解析出問題。那么在調用getname的時候把參數轉換好就行了。這個邏輯應該可行。
但是在這里我就有一個疑問,這個接收到的輸入的對象該怎么轉換呢?
querystring:其中nodejs中有一個模塊,querystring,作用是對URL的查詢字符串進行解析;有stringify() 和parse()兩個方法,一個是轉字符串,一個是解析為對象;
JSON處理JSON字符串的;JSON.stringify()可以解析為string;
toString()方法:都可以解析為string
這里我們采用的是inputData.toString().這里只是傳遞參數,也不是跟URL相關,自然用這個。好了問題解決!
