web-dev-qa-db-ja.com

GETできない/ Nodejsエラー

ここにあるチュートリアルを使用しています: 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は初めてですか?

11
tommyd456

ルートが欠落していると思われます。インデックスを作成するには、たとえば「/」などのルートを少なくとも1つ定義する必要があります。

例えば.

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

フォルダー構造を確認しましたか? Expressはルートディレクトリを見つけることができないように思えます。ルートディレクトリは、デフォルトディレクトリのすぐ下にある「site」という名前のフォルダである必要があります。チュートリアルによると、次のようになります。

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

たとえば、私のマシンでは、「サイト」フォルダーの名前を別の名前に変更したときに、同じエラーが表示され始めました。そのため、server.jsファイルと同じパスにある「サイト」フォルダー内にindex.htmlページがあることを確認することをお勧めします。

お役に立てば幸いです!

5
leonardocsouza

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.htmlapp/ディレクトリにあり、server.jsはルートディレクトリにあります(つまり、app/ディレクトリと同じレベル)。

補足:pathユーティリティの呼び出しの代わりに、構文application_root + 'site'を使用してパスに参加できます。

全体として、コードcouldのようになります:

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