web-dev-qa-db-ja.com

NodeJS with / Expressエラー:GETできません/

これは私が持っているもので、ファイル名「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 /
51
sia

通常、次のようなテンプレートをレンダリングします。

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 のドキュメントをご覧ください。

33
Sdedelbrock

ルートルートを定義する必要があります。

app.get('/', function(req, res) {
  // do something here.
});

ああ、express.static内でファイルを指定することはできません。ディレクトリである必要があります。 app.get('/'....は、それに応じてそのファイルをレンダリングします。エクスプレスのレンダリングメソッドを使用できますが、ビューがどこにあるかをエクスプレスに伝える伝統的なapp/views/フォルダー内のいくつかの設定オプションを追加する必要があります。

9
Daniel

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' }));
5
PTD

私は同じ問題を抱えていたので、ここに私が思いついたものがあります。これは、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.htmlapp/ディレクトリにあり、server.jsはルートディレクトリにあります(つまり、app/ディレクトリと同じレベル)。

全体的に、あなたのコードcouldのように見えます:

var express = require('express');

var app = express();

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

app.listen(process.env.PORT);
5
CopyLeft

「/」の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');
});
3
Serdar Dogruyol
var path = require('path');

app.use(express.static(__dirname + '/default.htm'));app.use(express.static(path.join(__dirname + '/default.htm')));に変更します。

また、default.htmlの正しいパスを指すようにしてください。

1
Wambua Makenzi

同じ問題がありました。以下のような小さな変更で解決しました。

var express = require('express');
var app = express();
app.use(express.static(path.join(__dirname, 'public')));

ここからヘルプを得ました(ExpressJSドキュメント-静的ファイルの提供)。

1

私の場合、静的コンテンツはすでに提供されていました。

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を取得できます。

これが他の誰かに役立つことを願っています。

0
Chaim Eliyah

ルートの冒頭にある「スラッシュ」を以下のように忘れてしまい、同じエラーが表示されていました。

違う :

app.get('api/courses',  (req, res) => { ... }
)

正解:

  app.get('/api/courses',  (req, res) => { ... }
    )
0
Bulent Balci

app.getが機能しない場合は、プロセスを再起動する必要があります。 ctl+cを押し、次にrestartノードアプリを押します。

0
Ashwani Panwar

私は質問で述べたのと同じ問題に直面していました。次の手順で問題を解決しました。

次の手順でnodejsパッケージリンクをアップグレードしました

  1. NPMのキャッシュをクリアします。

    npm cache clean -f
    
  2. 「n」という小さなヘルパーをインストールします

    npm install -g n  
    

次に、node.js Webサイトにアクセスし、最新のノードjsパッケージをダウンロードしてインストールし、問題を解決しました。

0