2017-02-15 5 views
0

カスタム404ページ(html、css、img、およびicoを含む)を表示したいと考えています。最初の公開静的ホームページを置き換えたときに私の404フォルダーが動作することを知っています。しかし、私はルートを正しい方法で使用していないか、2つの静的フォルダを設定できないと考えています。Express.js 4.xでは、express.staticを2回使用できますか?

私はテンプレートビューエンジンをまったく使用したくありません。私はすべてがフロントエンドでレンダリングされることを望みます。

次のように私のプロジェクトに見える:

404 
--index.html 
--error.css 
--404.jpg 
bin 
--server.js 
public 
--index.html 
routes 
--index.js 
package.json 
app.js 

app.js私は、ディレクトリ(使用しようとして 'で周りにプレイした

... 
var index = require(./routes/index); //works 
... 
app.use(favicon(__dirname + '/public/content/images/logo.ico')); 
app.use(logger('dev')); 
app.use(jsonParser); 
app.use(urlencodedParser); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); //love it 
app.use('/', index); //this is fine 
... 

index.js

var express = require('express'); 
const path = require('path'); 
var router = express.Router(); 

router.use(function timeLog(req, res, next) { 
    console.log('Time: ', Date.now()); 
    next(); 
}); 

router.use('/', express.static(path.join(__dirname, './404'))); // HALP! 

module.exports = router; 

を404 '対'/404 ')。私はこれを "localhost:3000/error"と入力してテストしています。したがって、パスが '/ error'の場合、親パスは '/'を使用する必要があります。ドキュメントは、私のルートが最後に置かれている限り、それはまだ動作するはずだと述べています。 express.staticを使わずにテストし、コンソールにエラーを出力するanon関数を使用しました。

express.static()を2回使用することはできませんか?

+1

はい、複数の 'express.static()'を使うことができます。それは単なるミドルウェアであり、あなたが望むだけの数を持つことができます。彼らは登録した順序で検索されます。あなたが達成しようとしていることはまったく明らかではありません。スタティックルーティングのヘルプについては、ファイルシステムに特定のファイルをロードする正確なURLの例をいくつか表示し、ファイルシステム内のファイルの場所を正確に表示してください。 – jfriend00

+0

パスを使用することはできませんか?私は、ホームページのほかに '/'というパスで 'express.static()'を使いたいと思っています。言い換えれば、 'router.use('/'、express.static(path.join(__ dirname、' ./404 ');' not working?なぜ静的で、単にconsole.logをテストすると動作するのですか? – DeadSupra

+0

参考404カスタム404ページでは、何らかの形でexpress.static()を必要としません。通常は、最後のミドルウェアとして404ミドルウェアハンドラを作成し、次にファイルを作成する 'res.sendFile()'を作成します。 http://expressjs.com/en/starter/faq.html。完成したHTMLファイルをクライアント側に送信するだけの場合(サーバーサイドのレンダリングなし)、 ' 404ミドルウェアでは 'res.sendFile(someLocalFilePath)'を使用しています。 – jfriend00

答えて

0

私のコメントのいくつかはあなたの解決策につながったので、答えに移りました。

Express.js 4.xでは、express.staticを2回使用できますか?

はい、express.static()は必要な回数だけ使用できます。ミドルウェアであり、要求に一致するファイルが見つからない場合は、next()を呼び出し、ミドルウェアチェーンを続行することができます。だから、あなたが望むだけの数のファイルを持つことができ、登録した順に一致するファイルを検索します。

カスタム404ページ(html、css、img、およびicoを含む)を表示したいと思います。最初の公開静的ホームページを置き換えたときに私の404フォルダーが動作することを知っています。しかし、私はルートを正しい方法で使用していないか、2つの静的フォルダを設定できないと考えています。

あなたは間違ってexpress.static()を使用してカスタム404ページを実装しようとしています。それはそうではありません。カスタム404ページを実装する通常の方法は、チェーン内の最後のミドルウェアハンドラを使用することです。それがヒットしたら、現在のリクエストに一致するものは見つからないので、カスタム404ページを送信します。通常、このようになります

app.use(function(req, res, next) { 
    res.status(404).sendFile(localPathToYour404Page); 
}); 

は、このExpress starter FAQの「私は404の応答を処理するにはどうすればよい」を参照してください。

さらに、いくつかの他の例を示すarticle on custom error pagesがあります。

+0

ベスト・アンサーには投票に値する人もいます。しかし、うまくいけば誰もこの恥ずべき疑問を見ていない。ハハ! – DeadSupra

0

https://github.com/jekku/users/blob/master/server.js#L41

ここExpressJSアプリにどのように私のルート私の静的なファイルです。私は通常ルートではしませんが、私はそれを「初期化」プロセスと見なします。任意のミドルウェアを2回以上使用することも可能です。必要なだけミドルウェアを覚えておいてください。

関連する問題