これは私が持っているもので、ファイル名「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 /
通常、次のようなテンプレートをレンダリングします。
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 のドキュメントをご覧ください。
ルートルートを定義する必要があります。
app.get('/', function(req, res) {
// do something here.
});
ああ、express.static
内でファイルを指定することはできません。ディレクトリである必要があります。 app.get('/'....
は、それに応じてそのファイルをレンダリングします。エクスプレスのレンダリングメソッドを使用できますが、ビューがどこにあるかをエクスプレスに伝える伝統的なapp/views/
フォルダー内のいくつかの設定オプションを追加する必要があります。
Cannot GET/
メッセージも受け取っていたので、このページで自分自身を見つけました。 OPのようにファイルではなく、以前の回答で提供されたように、express.static()
を使用してフォルダーをターゲットにしていたため、私の状況は異なりました。
Express 'docs を掘り下げて発見したのは、express.static()
がそのインデックスファイルをindex.html
として定義しているのに対し、私のファイルはindex.htm
という名前でした。
これをOPの質問に結び付けるには、2つのオプションがあります。
1:他の回答で提案されているコードを使用する
app.use(express.static(__dirname));
default.htm
ファイルの名前をindex.html
に変更します
または
2:express.static()
を呼び出すときにindex
プロパティを追加して、目的のインデックスファイルに転送します。
app.use(express.static(__dirname, { index: 'default.htm' }));
私は同じ問題を抱えていたので、ここに私が思いついたものがあります。これは、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/
ディレクトリと同じレベル)。
全体的に、あなたのコードcouldのように見えます:
var express = require('express');
var app = express();
app.use(express.static(__dirname));
app.listen(process.env.PORT);
「/」のgetメソッドはどこにありますか?
また、Expressで静的htmlを直接提供することはできません。最初に静的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');
});
var path = require('path');
app.use(express.static(__dirname + '/default.htm'));
をapp.use(express.static(path.join(__dirname + '/default.htm')));
に変更します。
また、default.htmlの正しいパスを指すようにしてください。
同じ問題がありました。以下のような小さな変更で解決しました。
var express = require('express');
var app = express();
app.use(express.static(path.join(__dirname, 'public')));
私の場合、静的コンテンツはすでに提供されていました。
app.use('/*', express.static(path.join(__dirname, '../pub/index.html')));
...そして、アプリ内のすべてが何らかの方法でそれに依存しているように見えました。 (path
depはrequire('path')
です)
そのため、a)はい、ファイルにすることができます。およびb)次のことができます リダイレクトを作成 !
app.get('/', function (req, res) { res.redirect('/index.html') });
これで、/
を押すと、/index.html
から静的に提供される../pub/index.html
を取得できます。
これが他の誰かに役立つことを願っています。
ルートの冒頭にある「スラッシュ」を以下のように忘れてしまい、同じエラーが表示されていました。
違う :
app.get('api/courses', (req, res) => { ... }
)
正解:
app.get('/api/courses', (req, res) => { ... }
)
app.get
が機能しない場合は、プロセスを再起動する必要があります。 ctl+c
を押し、次にrestart
ノードアプリを押します。
私は質問で述べたのと同じ問題に直面していました。次の手順で問題を解決しました。
次の手順でnodejsパッケージリンクをアップグレードしました
NPMのキャッシュをクリアします。
npm cache clean -f
「n」という小さなヘルパーをインストールします
npm install -g n
次に、node.js Webサイトにアクセスし、最新のノードjsパッケージをダウンロードしてインストールし、問題を解決しました。