在nodejs中 Object的toString()方法 querystring的stringify() JSON.stringify()


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM