剛學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相關,自然用這個。好了問題解決!