无法GET / Nodejs错误

时间:2014-01-23 19:50:12

标签: javascript node.js express routes

我正在使用此处的教程: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启动服务器后,当我访问Cannot GET /时,我收到错误,指出localhost:5000,我只是想知道是否有人对此错误了解多少,因为Express和Node是新的对我?

4 个答案:

答案 0 :(得分:16)

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

e.g。

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

答案 1 :(得分:4)

您检查过文件夹结构吗?在我看来,Express无法找到您的根目录,该目录应该是您的默认目录下名为“site”的文件夹。根据教程:

,它应该是这样的
node_modules/
  .bin/
  express/
  mongoose/
  path/
site/
  css/
  img/
  js/
  index.html
package.json

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

希望有所帮助!

答案 2 :(得分:2)

就像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/目录相同的级别)。

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

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

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

答案 3 :(得分:0)

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

例如:

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.