73

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

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

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

app.listen(process.env.PORT);

错误(在浏览器中):

Cannot GET /
4

15 回答 15

48

您通常希望像这样呈现模板:

app.get('/', function(req, res){
  res.render('index.ejs');
});

但是,您也可以提供静态内容 - 为此使用:

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

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

查看express APIConnect Static 中间件文档以获取更多信息。

于 2012-11-12T07:31:54.367 回答
15

您需要定义根路由。

app.get('/', function(req, res) {
  // do something here.
});

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

于 2012-11-12T07:28:03.110 回答
12

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

错误的 :

app.get('api/courses',  (req, res) => { ... }
)

正确的 :

  app.get('/api/courses',  (req, res) => { ... }
    )
于 2019-06-06T21:15:46.687 回答
10

我有同样的问题,所以这就是我想出的。这是我运行时的文件夹结构node server.js

app/
  index.html
  server.js

打印出__dirname路径后,我意识到该__dirname路径是我的服务器运行的位置(app/)。

所以,你的问题的答案是这样的:

如果您的server.js文件与您尝试渲染的文件位于同一文件夹中,则

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

实际上应该是

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

如果您有这样的文件夹树,您唯一想要使用原始语法的情况是:

app/
  index.html
server.js

whereindex.html是在app/目录中,而server.js是在根目录中(即与目录同级app/)。

总体而言,您的代码可能如下所示:

var express = require('express');

var app = express();

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

app.listen(process.env.PORT);
于 2016-05-21T19:52:10.390 回答
6

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

在对 Express 的文档进行一些挖掘之后,我发现express.static()将其索引文件定义为index.html,而我的文件名为index.htm.

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

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

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

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

或者

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

app.use(express.static(__dirname, { index: 'default.htm' }));
于 2016-09-24T14:57:49.587 回答
3

“/”的获取方法在哪里?

您也不能直接在 Express 中提供静态 html。首先您需要对其进行配置。

app.configure(function(){
  app.set('port', process.env.PORT || 3000);  
  app.set("view options", {layout: false});  //This one does the trick for rendering static html
  app.engine('html', require('ejs').renderFile); 
  app.use(app.router);

});

现在添加您的 get 方法。

app.get('/', function(req, res) {
  res.render('default.htm');
});
于 2012-11-12T07:32:04.267 回答
2

我遇到过同样的问题。通过像下面这样的小改动解决了它。

var express = require('express');
var app = express();
app.use(express.static(path.join(__dirname, 'public')));

这里获得帮助(ExpressJS 文档 - 提供静态文件)。

于 2017-03-15T14:49:47.897 回答
2

在我的例子中,静态内容已经被提供:

app.use('/*', express.static(path.join(__dirname, '../pub/index.html')));

...应用程序中的所有内容似乎都以某种方式依赖于此。( pathdep 是require('path'))

所以,a)是的,它可以是一个文件;b)您可以进行重定向

app.get('/', function (req, res) { res.redirect('/index.html') });

现在任何人点击/get/index.html都是从../pub/index.html.

希望这对其他人有帮助。

于 2018-03-06T02:46:15.137 回答
1
var path = require('path');

更改 app.use(express.static(__dirname + '/default.htm'));app.use(express.static(path.join(__dirname + '/default.htm')));

此外,请确保将其指向 default.html 的正确路径。

于 2017-09-26T11:00:28.097 回答
1

app.get如果不工作,您需要重新启动该过程。按ctl+c,然后按restart节点应用程序。

于 2019-03-01T10:22:23.967 回答
1

您需要在 index.html 文件中添加一个返回值。

app.use(express.static(path.join(__dirname, 'build')));

app.get('*', function(req, res) {res.sendFile(path.join(__dirname + '/build/index.html')); });

于 2020-11-10T11:30:46.787 回答
1

提供完整路径,例如我在https://ugoods.in/nodeapp上运行我的应用程序

app.get('/nodeapp', (req, res) => {
  res.send('Hello World!')
})

如果您将直接在http://ugoods.in或 http://localhost上运行

app.get('/', (req, res) => {
  res.send('Hello World!')
})
于 2021-07-07T06:08:54.227 回答
0

我面临着与问题中提到的相同的问题。以下步骤解决了我的问题。

我通过以下步骤升级了 nodejs 包链接

  1. 清除 NPM 的缓存:

    npm cache clean -f
    
  2. 安装一个名为'n'的小助手

    npm install -g n  
    

然后我去node.js网站,下载了最新的node js包,安装了,我的问题就解决了。

于 2016-01-22T14:01:46.877 回答
0

我有这个确切的问题,我的错误来源可能与您的错误来源不同。

但是,就我而言,这是因为我在子文件夹内的 CPanel 上运行应用程序实例:

app.get("/", (request, response) => {
       response.status(200).send("Hello there");
})

结果:

Can not GET /

所以,我意识到我设置了错误的参数,我所做的是:

app.get("/foldername/", (request, response) => {
       response.status(200).send("Hello there, it works!");
 })

结果:

Hello there, it works!
于 2021-05-11T13:27:09.517 回答
-1

另一种解决方案是检查您的.static()参数是否引用了其他网站文件(.html、.css、..)的正确文件夹。此文件夹应位于 server.js 文件的同一目录中。不知道为什么,我尝试将它放在不同的目录中并传递 ./website 例如,但它没有用。:/

于 2021-04-18T16:20:26.423 回答