3

私は安らかなエクスプレス サービス + バックボーン クライアントのディレクトリ構造を持っており、このようにpushStateが有効になっています (クライアント コードは のとおりですpublic/) 。

app.js
lib/routes.js
-- public/
   -- index.html

/publicの静的ディレクトリになるように設定しましたapp.configure

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

インデックスが最初にアクセスされた場合、これはすでにすぐに機能します。

次に、ホームページ以外のルートに直接アクセスしたときに、 にリダイレクトするようにしindex.htmlます。これは で完全に正常に動作しますがapp.jsこれを入れようとするとlib/routes.js、禁じられたエラーが発生します:

正常に動作するからapp.js

app.get('*', function(req, res) {
    res.sendfile(__dirname + '/public/index.html');
});

からlib/routes.js:

res.sendfile(__dirname + '../public/index.html');

私に与えます:

Error: Forbidden
        at SendStream.error (/Users/*****/Sites/myproject/node_modules/express/node_modules/send/lib/send.js:145:16)
        at SendStream.pipe (/Users/*****/Sites/myproject/node_modules/express/node_modules/send/lib/send.js:307:39)
        at ServerResponse.res.sendfile (/Users/*****/Sites/myproject/node_modules/express/lib/response.js:345:8)
        at /Users/*****/Sites/myproject/lib/routes.js:8:7
        at callbacks (/Users/*****/Sites/myproject/node_modules/express/lib/router/index.js:164:37)
        at param (/Users/*****/Sites/myproject/node_modules/express/lib/router/index.js:138:11)
        at pass (/Users/*****/Sites/myproject/node_modules/express/lib/router/index.js:145:5)
        at Router._dispatch (/Users/*****/Sites/myproject/node_modules/express/lib/router/index.js:173:5)
        at Object.router (/Users/*****/Sites/myproject/node_modules/express/lib/router/index.js:33:10)
        at next (/Users/*****/Sites/myproject/node_modules/express/node_modules/connect/lib/proto.js:193:15)

私が単に試してみると:

res.sendfile('/public/index.html');

ファイルが見つからず、次のようになります。

Error: ENOENT, stat '/public/index.html'

要約すると、Forbidden エラーを発生させずにfromを使用sendFileして渡すにはどうすればよいですか?public/index.htmllib/routes.js

4

1 に答える 1

11

ありがとう@ジョー。完全を期すために、重複はあまり明確ではなく{root: 'somepath'}、2番目のパラメーターとしての試行を含むさまざまな相対パスを試行しても機能しませんでした。これは私がしたことです:

var path = require('path');
...
app.get('*', function(req, res) {
    res.sendfile(path.resolve('public/index.html'));
});

それlib/はベースディレクトリを使用して解決されたディレクトリにありますが、繰り返しますが、相対解決はうまくいきませんでしたが、それを行う方法があるかもしれません。

于 2014-04-06T22:57:15.100 に答える