NodeJS w / Express错误:无法GET /

这就是我所拥有的,文件名“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 / 

你通常想渲染这样的模板:

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

不过,你也可以提供静态内容 – 这样做使用:

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

现在,项目的/public目录中的所有内容都将作为站点根目录中的静态内容提供,例如,如果将default.htm放置在公用文件夹中(如果可以访问/default.htm

通过快速API和连接静态中间件文档了解更多信息。

你需要定义一个根路由。

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

哦,你不能在express.static指定一个文件。 它需要是一个目录。 app.get('/'....将负责渲染该文件,你可以使用快速的渲染方法,但是你必须添加一些configuration选项来显示你的视图在哪里,传统上app/views/文件夹。

你在哪里得到“/”的方法?

你也无法直接在Express.First静态html提供你需要configuration它。

 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'); }); 

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

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

为了配合OP的问题,有两个select:

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

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

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

要么

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

 app.use(express.static(__dirname, { index: 'default.htm' })); 

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

 app/ index.html server.js 

打印完__dirnamepath后,我意识到__dirnamepath是我的服务器运行的地方( app/ )。

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

如果您的server.js文件与您要呈现的文件在同一文件夹中,那么

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

实际上应该是

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

唯一一次你想使用原来的语法,如果你有像这样的文件夹树:

 app/ index.html server.js 

其中index.html位于app/目录中,而server.js位于根目录(即与app/目录相同的级别)。

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

 var express = require('express'); var app = express(); app.use(express.static(__dirname)); app.listen(process.env.PORT); 

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

我使用以下步骤升级了nodejs包链接

  1. 清除NPM的caching:

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

     npm install -gn 

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

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

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

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

 var path = require('path'); 

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

另外,请确保将其指向您的default.html的正确path。