0

node/express を使用して複数の html/jade ファイルを表示したい。

存在しないファイルを処理するための基本的なルールを作成しようとしています。

このコードを記述した場合、エラー応答は処理されませんが、機能します。

app.get('/art/:project', function(req, res){
        var project = req.param('project');
        res.render('art/' + project);
    });

このコードを書いている場合、エラーは正しく処理されますが、ファイルが存在する場合、何らかの理由でページが表示されません。

 app.get('/art/:project', function(req, res){
        var project = req.param('project');
        res.render('art/' + project, function(err, html) {
          if (err) {
            res.redirect('/');
         }
       });
    });

私は何が欠けていますか?

これは機能することがわかりましたが、非常に非効率的です。

  res.render('art/' + project, function(err, html) {
    console.log(err, html);
    if (err) {
        res.redirect('/');
    } else {
        res.render('art/' + project);
    }
  });
4

2 に答える 2

0

その存在がOKであることをよく確認してくださいが、ドキュメントは示唆しています:

fs.exists() は時代錯誤であり、歴史的な理由からのみ存在します。独自のコードでそれを使用する理由はほとんどないはずです。

特に、ファイルを開く前にファイルが存在するかどうかを確認することは、競合状態に対して脆弱なアンチパターンです: 別のプロセスが fs.exists() と fs.open() の呼び出しの間にファイルを削除する可能性があります。ファイルを開いて、そこにないときにエラーを処理するだけです。

したがって、例外をキャッチしてから処理することをお勧めします。

try {
    res.render('art/' + project);
} 
catch(e) {
    if (e.code === 'ENOENT')
        res.redirect('/');
    else
        throw e;
}
于 2014-06-12T08:50:28.663 に答える