【问题标题】:NodeJS w/Express Error: Cannot GET /NodeJS w/Express 错误:无法获取 /
【发布时间】:2012-10-31 15:20:52
【问题描述】:

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

【问题讨论】:

  • 任何答案是否对您有帮助,或者您是否以其他方式解决了您的问题?请分享..
  • 您的问题缺乏细节。向哪个 URL 请求显示此错误?

标签: node.js get express


【解决方案1】:

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

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

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

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

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

查看express API 和Connect Static middleware 文档了解更多信息。

【讨论】:

  • 角度如何做到这一点?
  • @SirBenBenji - Angular 不能这样做,因为它是 Express 中的配置。
【解决方案2】:

你需要定义一个根路由。

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

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

【讨论】:

    【解决方案3】:

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

    错了:

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

    正确:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案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:调用express.static()时添加index属性,将其定向到所需的索引文件:

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

        【讨论】:

        • 感谢它解决了我的问题。出于某种原因,Index.html 在 Windows 中很好,但我必须在 linux 中指定它。
        【解决方案6】:

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

        你也不能直接在 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');
        });
        

        【讨论】:

          【解决方案7】:

          我有同样的问题。通过如下的小改动解决了它。

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

          得到here (ExpressJS Documentation - Serving static files).的帮助

          【讨论】:

            【解决方案8】:

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

            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 静态提供的。

            希望这对其他人有所帮助。

            【讨论】:

              【解决方案9】:
              var path = require('path');
              

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

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

              【讨论】:

                【解决方案10】:

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

                【讨论】:

                  【解决方案11】:

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

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

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

                  【讨论】:

                    【解决方案12】:

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

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

                    1. 清除 NPM 的缓存:

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

                      npm install -g n  
                      

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

                    【讨论】:

                    • @knownasaliya 这个答案是给你的
                    【解决方案13】:

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

                    但是,就我而言,这是因为我在子文件夹内的 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!
                    

                    【讨论】:

                      【解决方案14】:

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

                      【讨论】:

                        【解决方案15】:

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

                        【讨论】:

                        • 是这个答案还是您想评论您对问题的看法?你能澄清一下吗?
                        • 这是一个答案,我有一个类似的问题,这里的其他答案并没有解决我的问题。这就是为什么我添加了这个答案,以防将来有人需要它。 :D 我编辑了我的答案。
                        猜你喜欢
                        • 1970-01-01
                        • 2023-03-19
                        • 1970-01-01
                        • 1970-01-01
                        • 2018-07-01
                        • 1970-01-01
                        • 2014-02-14
                        • 2018-01-19
                        • 1970-01-01
                        相关资源
                        最近更新 更多