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

时间:2012-11-12 07:22:42

标签: node.js get express

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

15 个答案:

答案 0 :(得分:32)

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

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

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

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

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

查看express APIConnect Static middleware文档以获取更多信息。

答案 1 :(得分:9)

您需要定义根路由。

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

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

答案 2 :(得分:5)

我遇到了同样的问题,所以这就是我提出的问题。这是我运行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

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

总的来说,您的代码可以看起来像:

var express = require('express');

var app = express();

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

app.listen(process.env.PORT);

答案 3 :(得分:5)

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

我在通过Express' docs进行挖掘后发现,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' }));

答案 4 :(得分:3)

“/”的get方法在哪里?

此外,您无法直接在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');
});

答案 5 :(得分:1)

我有同样的问题。通过下面的小改动解决了这个问题。

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

获得here (ExpressJS Documentation - Serving static files).

的帮助

答案 6 :(得分:1)

kube-apiserver

var path = require('path'); 更改为 app.use(express.static(__dirname + '/default.htm'));

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

答案 7 :(得分:1)

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

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

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

答案 8 :(得分:0)

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

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

  1. 清除NPM的缓存:

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

    npm install -g n  
    
  3. 然后我去了node.js网站,下载了最新的节点js包,安装了它,问题解决了。

答案 9 :(得分:0)

在我的情况下,静态内容已经提供:

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

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

所以,a)是的,它可以是一个文件;和b)你可以make a redirect

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

现在,任何点击/的人都会/index.html获得../pub/index.html的静态服务。

希望这有助于其他人。

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

错误:

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

正确:

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

答案 12 :(得分: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!

答案 13 :(得分:0)

提供完整路径,例如我在 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!')
})

答案 14 :(得分:-1)

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