ここにあるチュートリアルを使用しています: 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は初めてですか?
ルートが欠落していると思われます。インデックスを作成するには、たとえば「/」などのルートを少なくとも1つ定義する必要があります。
例えば.
app.get('/', function (req, res) {
res.render('index', {});
});
フォルダー構造を確認しましたか? Expressはルートディレクトリを見つけることができないように思えます。ルートディレクトリは、デフォルトディレクトリのすぐ下にある「site」という名前のフォルダである必要があります。チュートリアルによると、次のようになります。
node_modules/
.bin/
express/
mongoose/
path/
site/
css/
img/
js/
index.html
package.json
たとえば、私のマシンでは、「サイト」フォルダーの名前を別の名前に変更したときに、同じエラーが表示され始めました。そのため、server.jsファイルと同じパスにある「サイト」フォルダー内にindex.htmlページがあることを確認することをお勧めします。
お役に立てば幸いです!
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
ユーティリティの呼び出しの代わりに、構文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 );
});