2013-10-27 165 views
0

我正在使用一個基本的node.js介紹腳本,並且我在命令行中傳遞了一個參數。 我希望這個參數在運行後傳回客戶端。我可以傳回任何純文本或值的東西,但我無法傳回包含相同信息的變量。節點JS返回undefined?

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"/> 
    <title>get test</title> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"> 
    </script> 
</head> 
<body> 
    <h1>Get Test</h1> 
    <div id="test"></div> 
    <script> 
    $(document).ready(function() { 
     $.ajax({url: 'http://localhost',dataType: "jsonp",jsonpCallback: "_testcb",cache: false,timeout: 5000,success: function(data) { 
      $("#test").append(data); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      alert('error ' + textStatus + " " + errorThrown); 
     } 
     }); 
    }); 
</script> 
</body> 
</html> 

這是我的服務器代碼:

var http = require('http'); 
var arr = new Array(); 
http.createServer(function (req, res) { 
    res.writeHead(200); 

    // print process.argv 
    process.argv.forEach(function(val, index, array) { 
    console.log(index + ': ' + val); 
    arr[index] = val; 
    res.write("Size" + val); 
    res.end('_testcb(\'{"Size: \' + val + \'"}\')'); 
    }); 


    console.log(arr[2]); 
}).listen(80); 

所以我的問題是,我怎麼傳回的對象/變量/數組而不是靜態的文字?

回答

2

如果您要將數據發送到客戶端,則需要serializ將數據轉換爲JSON,以便將值發送給客戶端。

例如,要發送的參數所有到客戶端,你可以簡單地改變方法:

http.createServer(function (req, res) { 
    res.writeHead(200); 

    res.write("_testcb(" + JSON.stringify(process.argv) + ")"); 
}).listen(80); 

這將使data(客戶端)的所有參數數組該過程。

如果要傳遞不同類型的對象,請按照需要的方式創建變量,然後再使用JSON.stringify將數據轉換爲可以發送的文本。例如:

http.createServer(function (req, res) { 
    res.writeHead(200); 

    // create an empty object 
    var data = {}; 

    // add a size attribute 
    data["Size"] = process.argv[1]; 

    res.write("_testcb(" + JSON.stringify(data) + ")"); 
}).listen(80); 

的關鍵,這一切,是JSON.stringify方法 - 它允許您將變量轉換成JSON,客戶端然後解析爲數據。

+0

謝謝,這是有道理的,並感謝深入的解釋。 – Phil

1

您只能來回傳遞文本,但您可以傳遞JSON格式的文本並在客戶端/服務器上解析它。

編輯

以防萬一,我誤解了這個問題,你希望得到您的NodeJS進程啓動的命令行參數,看看這個線程:

How do I pass command line arguments?

參數存儲在process.argv

+0

好的,謝謝,是的,我知道'process.argv',並試圖讓第三個條目返回到客戶端。 – Phil

+0

您正在結束** for循環中的響應**。 – Adam