2016-02-11 30 views
1

我可以在腳本中使用節點4.2.6中的查詢字符串,但我可以從節點提示符處使用。這是一些證據。節點查詢字符串沒有在腳本中定義

我有以下腳本:

$ cat test.js 
console.log(process.versions) 
console.log(querystring) 

當我運行它,我得到一個錯誤:

$ node test.js 
{ http_parser: '2.5.0', 
    node: '4.2.6', 
    v8: '4.5.103.35', 
    uv: '1.8.0', 
    zlib: '1.2.8', 
    ares: '1.10.1-DEV', 
    icu: '56.1', 
    modules: '46', 
    openssl: '1.0.2e' } 
/path/to/file/test.js:2 
console.log(querystring) 
      ^
ReferenceError: querystring is not defined 
    at Object.<anonymous> (/path/to/file/test.js:2:13) 
    at Module._compile (module.js:410:26) 
    at Object.Module._extensions..js (module.js:417:10) 
    at Module.load (module.js:344:32) 
    at Function.Module._load (module.js:301:12) 
    at Function.Module.runMain (module.js:442:10) 
    at startup (node.js:136:18) 
    at node.js:966:3 

但是,如果我進入命令行上的節點,我不明白錯誤。

$ node 
> console.log(process.versions) 
{ http_parser: '2.5.0', 
    node: '4.2.6', 
    v8: '4.5.103.35', 
    uv: '1.8.0', 
    zlib: '1.2.8', 
    ares: '1.10.1-DEV', 
    icu: '56.1', 
    modules: '46', 
    openssl: '1.0.2e' } 
undefined 
> console.log(querystring) 
{ unescapeBuffer: [Function], 
    unescape: [Function], 
    escape: [Function], 
    encode: [Function], 
    stringify: [Function], 
    decode: [Function], 
    parse: [Function] } 
undefined 

的執行console.log()僅僅是爲了證明這一點 - 我不能在腳本中使用的查詢字符串的。什麼可能是錯的?

回答

6

節點REPL(只要輸入可執行文件名稱(node))時會自動加載內置模塊作爲全局變量,因爲它們是爲了方便而按名稱訪問的。這在文檔here中提到。

對於使用node foo.js加載的腳本,您需要手動模塊require()以獲取實際所需的內容。對於querystring模塊,你只需要做:

var querystring = require('querystring'); 

沒有必要npm install querystring因爲模塊是內置到節點。

+0

感謝您參閱解釋痛點的文檔 –

相關問題