2015-07-11 73 views
19

我對Node非常陌生,並且試圖讓我的腦袋圍繞着應用的基礎。我很好奇,爲什麼這兩個命令:npm start和node app.js

節點app.js

--vs--

NPM啓動

輸出同樣的事情到控制檯,並似乎繼續「聆聽」,但爲什麼當我嘗試訪問http://localhost:3000我只有在運行第一個命令時纔得到404。

我看到Express 4似乎有不同的應用程序結構,但爲什麼它成功偵聽而另一個不成功,儘管控制檯中有相同的行爲?

任何解釋都很有幫助。謝謝!

+3

'npm start'查看package.json中的'start'腳本。它可能與app.js不同。試着看看package.json。 – hassansin

+0

你可以發佈你的app.js和你的package.json的相關部分嗎? –

+0

[相關鏈接](https://docs.npmjs.com/misc/scripts) –

回答

18

這兩個命令不一定相同。 npm start運行'start'腳本配置按照'package.json'中的定義運行,node app.js在'node'中執行'app.js'文件。有關更多信息,請參見http://browsenpm.org/package.json。所以,如果你有以下package.json,那麼這些命令是完全不同的。

{ 
    "name": "my cool node project", 
    .... 
    "scripts": { 
     "start": "node index.js" 
    } 
    .... 
} 

下面的package.json是你想使它們相同。

{ 
    "name": "my cool node project", 
    .... 
    "scripts": { 
     "start": "node app.js" 
    } 
    .... 
} 

我想通過檢查什麼「開始」腳本設置爲運行,並嘗試直接在命令行而不是通過NPM運行相同的命令,看看那裏的區別是開始。

,但爲什麼它是一個成功的監聽和其他沒有

如果服務器返回一個404,這將意味着服務器正在偵聽,但無論是文檔根目錄或訪問權限AREN沒有正確設置,因此它返回了「文件未找到」響應。

+3

知道什麼,你說得對。我終於明白了,我有點迷失方向,因爲我來自FE自動化界的太多使用咕嚕聲。 基本上,./bin/www文件現在是服務器的引導程序,而舊版本的Express不是這種情況。謝謝你幫助我理解。 基本上我明白,app.js並沒有完全引導應用程序,但它做的事情就像mongodb連接,這就是爲什麼我看到我的控制檯日誌。新的表達規範使用./bin/www來執行所有引導(我喜歡它;它看起來更清晰)。 +1謝謝! – dudewad