73

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

15 に答える 15

48

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

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

ただし、静的コンテンツを配信することもできます。そのためには、次を使用します。

app.use(express.static(__dirname + '/public'));

これで、プロジェクトのディレクトリ内のすべてが/public静的コンテンツとしてサイトのルートに配信されます。たとえばdefault.htm、パブリック フォルダーに配置すると、/default.htm

詳細については、express APIConnect Static ミドルウェアのドキュメントを参照してください。

于 2012-11-12T07:31:54.367 に答える
15

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

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

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

于 2012-11-12T07:28:03.110 に答える
10

私は同じ問題を抱えていたので、ここに私が思いついたものがあります。これは、実行したときにフォルダー構造がどのように見えるかですnode server.js

app/
  index.html
  server.js

パスを出力した後、パスがサーバーが実行されている場所で__dirnameあることに気付きました( )。__dirnameapp/

したがって、あなたの質問に対する答えは次のとおりです。

ファイルserver.jsがレンダリングしようとしているファイルと同じフォルダーにある場合、

app.use(express.static(__dirname + '/default.htm'));

実際にあるはずです

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

元の構文を使用したいのは、次のようなフォルダー ツリーがある場合だけです。

app/
  index.html
server.js

はディレクトリindex.html内、 はルート ディレクトリ内 (つまり、ディレクトリと同じレベル) にあります。app/server.jsapp/

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

var express = require('express');

var app = express();

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

app.listen(process.env.PORT);
于 2016-05-21T19:52:10.390 に答える
3

「/」の get メソッドはどこにありますか?

また、Express.First で静的 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');
});
于 2012-11-12T07:32:04.267 に答える
1

index.html ファイルに return を追加する必要があります。

app.use(express.static(path.join(__dirname, 'build')));

app.get('*', function(req, res) {res.sendFile(path.join(__dirname + '/build/index.html')); });

于 2020-11-10T11:30:46.787 に答える
0

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

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

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

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

    npm install -g n  
    

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

于 2016-01-22T14:01:46.877 に答える