【问题标题】:Cannot GET / Nodejs Error无法获取/Nodejs 错误
【发布时间】:2014-02-14 13:55:11
【问题描述】:

我正在使用此处找到的教程:http://addyosmani.github.io/backbone-fundamentals/#create-a-simple-web-server 并添加了以下代码。

// Module dependencies.
var application_root = __dirname,
express = require( 'express' ), //Web framework
path = require( 'path' ), //Utilities for dealing with file paths
mongoose = require( 'mongoose' ); //MongoDB integration

//Create server
var app = express();

// Configure server
app.configure( function() {
//parses request body and populates request.body
app.use( express.bodyParser() );

//checks request.body for HTTP method overrides
app.use( express.methodOverride() );

//perform route lookup based on url and HTTP method
app.use( app.router );

//Where to serve static content
app.use( express.static( path.join( application_root, 'site') ) );

//Show all errors in development
app.use( express.errorHandler({ dumpExceptions: true, showStack: true }));
});

//Start server
var port = 5000;
app.listen( port, function() {
console.log( 'Express server listening on port %d in %s mode', port, app.settings.env );
});

使用node server.js 启动服务器后,当我访问localhost:5000 时收到一条错误消息,指出Cannot GET /,我只是想知道是否有人对此错误了解很多,因为Express 和Node 对我来说是新手?

【问题讨论】:

    标签: javascript node.js express routes


    【解决方案1】:

    我认为你错过了你的路线,你需要定义至少一个路线,例如'/'来索引。

    例如

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

    【讨论】:

    • 你是对的 - 这是一个路线问题,但指南建议它应该在此时不添加路线的情况下工作。
    • 取决于您在静态内容文件夹(即站点)中的内容。如果您有指南示例中的 index.html,那么它可能会起作用。
    • 我确实有一个 HTML 文件 - 无论如何现在都不要介意
    • 该指南中显然还有其他内容,因为它表明当您转到localhost:5000 时,您会得到一个完全开发的 HTML 结果,而在您列出的代码中找不到。
    • 是的,这是从早些时候开始的,但与我遇到的问题没有真正的联系。
    【解决方案2】:

    您检查过您的文件夹结构吗?在我看来,Express 找不到你的根目录,它应该是一个名为“site”的文件夹,就在你的默认目录下。根据教程,它应该是这样的:

    node_modules/
      .bin/
      express/
      mongoose/
      path/
    site/
      css/
      img/
      js/
      index.html
    package.json
    

    例如,在我的机器上,当我将“站点”文件夹重命名为其他内容时,我开始遇到与您相同的错误。因此,我建议您检查 index.html 页面是否位于与 server.js 文件位于同一路径的“站点”文件夹中。

    希望有帮助!

    【讨论】:

      【解决方案3】:

      很像 leonardocsouza,我也遇到了同样的问题。澄清一下,这就是我运行node server.js时的文件夹结构@

      node_modules/
      app/
        index.html
        server.js
      

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

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

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

      app.use( express.static( path.join( application_root, 'site') ) );
      

      应该是

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

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

      app/
        index.html
      node_modules
      server.js
      

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

      旁注:您可以使用语法application_root + 'site' 来加入路径,而不是调用path 实用程序。

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

      // Module dependencies.
      var application_root = __dirname,
      express = require( 'express' ), //Web framework
      mongoose = require( 'mongoose' ); //MongoDB integration
      
      //Create server
      var app = express();
      
      // Configure server
      app.configure( function() {
      
          //Don't change anything here...
      
          //Where to serve static content
          app.use( express.static( application_root ) );
      
          //Nothing changes here either...
      });
      
      //Start server --- No changes made here
      var port = 5000;
      app.listen( port, function() {
          console.log( 'Express server listening on port %d in %s mode', port, app.settings.env );
      });
      

      【讨论】:

        【解决方案4】:

        如果您收到此错误,可能是因为您没有为您的 get 定义路由。

        例如:

        const express = require('express');
        
        const app = express();
        
        app.get('/people', function (req, res) {
            res.send('hello');
        })
        
        app.listen(3000);
        
        
        http://http://localhost:3000/people --> this works
        http://http://localhost:3000 --> this will output Cannot GET / message.
        

        【讨论】:

          【解决方案5】:

          问题原因

          出现此类问题的一般原因是您忘记使用路由器

          所以你需要调用类似的东西

          app.use(路由器);

          在这种情况下,路由器只不过是表达路由器实例 常量路由器 = 路由器();

          【讨论】:

            猜你喜欢
            • 2012-10-31
            • 2023-03-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-04-06
            • 2021-02-25
            • 1970-01-01
            相关资源
            最近更新 更多