具有快速错误的NodeJS:无法获取/

sia*_*sia 53 get node.js express

这就是我所拥有的,文件名"default.htm"实际存在并在使用NodeJS执行readFile时加载.

var express = require('express');
var app = express();

app.use(express.static(__dirname + '/default.htm'));

app.listen(process.env.PORT);
Run Code Online (Sandbox Code Playgroud)

错误(在浏览器中):

Cannot GET /
Run Code Online (Sandbox Code Playgroud)

Sde*_*ock 35

您通常希望渲染这样的模板:

app.get('/', function(req, res){
  res.render('index.ejs');
});
Run Code Online (Sandbox Code Playgroud)

但是,您也可以提供静态内容 - 这样做可以使用:

app.use(express.static(__dirname + '/public'));
Run Code Online (Sandbox Code Playgroud)

现在/public,项目目录中的所有内容都将作为静态内容传递到您网站的根目录,例如,如果您放置default.htm在公共文件夹中,如果可以通过访问/default.htm

查看快速APIConnect Static中间件文档以获取更多信息.

  • @SirBenBenji - 这不能用于Angular,因为它是Express中的配置. (2认同)

小智 11

我注意到我忘记了路线开头的“斜线”,如下所示,我遇到了同样的错误:

错误的 :

app.get('api/courses',  (req, res) => { ... }
)
Run Code Online (Sandbox Code Playgroud)

正确的 :

  app.get('/api/courses',  (req, res) => { ... }
    )
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 9

您需要定义根路由.

app.get('/', function(req, res) {
  // do something here.
});
Run Code Online (Sandbox Code Playgroud)

哦,你不能指定一个文件express.static.它需要是一个目录.该app.get('/'....负责将相应地呈现该文件.您可以使用快速'渲染方法,但您必须添加一些配置选项,这些选项将告诉您的视图在哪里,传统上在app/views/文件夹中.


小智 5

我遇到了同样的问题,所以这就是我提出的问题.这就是我跑步时文件夹结构的样子node server.js

app/
  index.html
  server.js
Run Code Online (Sandbox Code Playgroud)

打印出__dirname路径后,我意识到__dirname路径是我的服务器运行的地方(app/).

那么,你的问题的答案是这样的:

如果您的server.js文件与您尝试呈现的文件位于同一文件夹中,那么

app.use(express.static(__dirname + '/default.htm'));
Run Code Online (Sandbox Code Playgroud)

应该是

app.use(express.static(__dirname));
Run Code Online (Sandbox Code Playgroud)

如果你有一个像这样的文件夹树,你唯一想要使用原始语法的方法是:

app/
  index.html
server.js
Run Code Online (Sandbox Code Playgroud)

在目录index.html中的哪个位置app/,而server.js在根目录中(即与目录相同的级别app/).

总的来说,您的代码可能如下所示:

var express = require('express');

var app = express();

app.use(express.static(__dirname));

app.listen(process.env.PORT);
Run Code Online (Sandbox Code Playgroud)


PTD*_*PTD 5

我发现自己在这个页面上,因为我也收到了Cannot GET/消息.我的情况与我express.static()用于定位文件夹的情况不同,正如之前的答案所提供的那样,而不是像OP那样的文件.

我在通过Express'文档挖掘后发现的是express.static()将其索引文件定义为index.html,而我的文件被命名index.htm.

为了将其与OP的问题联系起来,有两种选择:

1:使用其他答案中建议的代码

app.use(express.static(__dirname));
Run Code Online (Sandbox Code Playgroud)

然后将default.htm文件重命名为index.html

要么

2:index在调用时添加属性express.static()以将其指向所需的索引文件:

app.use(express.static(__dirname, { index: 'default.htm' }));
Run Code Online (Sandbox Code Playgroud)