2012-11-12 18 views
28

これは私が持っているファイル名 "default.htm"が実際に存在し、NodeJSでreadFileを実行するときに読み込まれます。NodeJS w/Expressエラー:/

var express = require('express'); 
var app = express(); 

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

app.listen(process.env.PORT); 

エラー(ブラウザで):あなたはルートルートを定義する必要が

Cannot GET/
+3

回答がお手伝いしましたか、問題を別の方法で解決しましたか?共有してください。 – knownasilya

答えて

8

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

ああ、あなたはexpress.static内のファイルを指定することはできません。それはディレクトリである必要があります。 app.get('/'....は、そのファイルを適切にレンダリングする責任があります。エクスプレスのレンダリングメソッドを使用することもできますが、伝統的にはapp/views/フォルダ内にビューの位置を明示する設定オプションを追加する必要があります。

24

あなたは通常、このようなテンプレートレンダリングしたい:あなたも、静的なコンテンツを配信することができますしかし

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

を - ので、使用しないために:

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

今、あなたのプロジェクトの/publicディレクトリにあるすべてのものをしますたとえば、サイトのルートに静的コンテンツとして配信されます。 /default.htm

を訪問して利用できるようになります場合は、パブリックフォルダにdefault.htmを配置する場合は、詳細はexpress APIConnect Static middlewareドキュメントを通して見てみましょう。

+0

角をどのようにするのですか? – nottinhill

+2

@SirBenBenji - これはExpressの設定であるため、Angularでは実行できません。 – Ben

3

「/」の取得方法はどこですか?

また、静的なHTMLを直接Express.Firstに配信することはできません。設定する必要があります。

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

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

私は

    1. クリアNPMのキャッシュは、次の手順でnodejsパッケージリンクをアップグレード:少し 'N' と呼ばれるヘルパー

      npm install -g n 
      

    をインストール

    npm cache clean -f 
    
  • をそれからnode.jsに行きました最新のノードjsパッケージをダウンロードしてインストールしたところ、問題は解決しました。

  • +0

    @knownasaliyaこの回答はあなたのためです –

    1

    私は同じ問題を抱えていたので、ここで私が思いついたのです。これは私が__dirnameパスをプリントアウトした後node server.js

    app/ 
        index.html 
        server.js 
    

    を実行したときに、私は私のサーバーは、(app/)を実行していたところ__dirnameパスだったことに気づいたように私のフォルダ構造が見えたものです。

    だから、あなたの質問への答えはこれです:

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

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

    が実際に

    する必要があります
    app.use(express.static(__dirname)); 
    

    オリジナルの構文を使用したい場合は、あなたがそのようなフォルダツリーがあった場合、dは次のようになります。index.htmlapp/ディレクトリにある

    app/ 
        index.html 
    server.js 
    

    server.jsは、ルートディレクトリにあるのに対し、(すなわち、ディレクトリはapp/と同じレベルです)。私もCannot GET/メッセージを受信したとして、私はこのページに自分自身を発見した

    var express = require('express'); 
    
    var app = express(); 
    
    app.use(express.static(__dirname)); 
    
    app.listen(process.env.PORT); 
    
    3

    全体的に、あなたのコードようになります。以前の回答で提供されていたように、express.static()をフォルダのターゲットに使用していたため、私の状況が異なり、OPのファイルではありませんでした。私はExpress' docsを通じて、いくつかの掘削後に発見何

    は、私のファイルはindex.htmと命名されたのに対しexpress.static()は、index.htmlとしてのインデックスファイルを定義することです。

    1:OPの質問にこれを結びつけるために

    、2つのオプションがあり、コードを使用して他の回答に

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

    を提案し、その後index.html

    または

    default.htmファイルの名前を変更

    2:express.static()を呼び出すときにindexプロパティを追加してください目的のインデックスファイル:

    app.use(express.static(__dirname, { index: 'default.htm' })); 
    
    +0

    これは私の問題を修正してくれてありがとう。何らかの理由でIndex.htmlはWindowsでうまくいたが、linuxで指定しなければならなかった。 –

    0

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

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

    app.use(express.static(path.join(__dirname + '/default.htm')));に変更app.use(express.static(__dirname + '/default.htm'));here (ExpressJS Documentation - Serving static files).

    1
    var path = require('path'); 
    

    からもらったヘルプ。

    また、default.htmlの正しいパスを指していることを確認してください。

    app.use('/*', express.static(path.join(__dirname, '../pub/index.html'))); 
    

    ...とアプリですべてが何らかの方法でそれに依存するように見えた。私の場合は

    0

    は、静的コンテンツは、すでに提供されていました。 (path depはrequire('path')

    だから、a)はい、それはファイルです。 b)あなたはmake a redirectです!今

    app.get('/', function (req, res) { res.redirect('/index.html') }); 
    

    /を打つ誰もが../pub/index.htmlから静的に提供しています/index.htmlを取得します。

    これは他の人に役立つことを願っています。