2015-07-11 78 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