5

現在、routes.js に次の行を含めることで、以前のルートでは見つからなかったすべてのページを pagesController にルーティングしています。

this.match('/:page', { controller: 'pages', action: 'show' });

PagesController が見つからない場合に 404 を処理できるようにするというアイデアがありました。

PagesController.show = function() {
    var page = this.param('page');
    if(page != undefined){
        page = page.replace(".html","");        
        try {
            this.render("./"+page);
        } catch(error){ //Failed to look up view -- not working at the moment =(
            this.redirect({action : "404"});
        };
    }

    return;
};

しかし、私の考えは失敗しています。エラーをキャッチできないため、致命的なエラーが引き続き発生します。render 呼び出しに fn を追加する必要がありますか? どのような引数で?それはどのように機能しますか?(/簡単な質問)。

4

1 に答える 1

6

次のようになります。

PagesController.show = function() {
  var self  = this;
  var page  = this.param('page');

  if (page !== undefined) {
    page = page.replace('.html', '');
    this.render("./" + page, function(err, html) {
      if (! err)
        return self.res.send(html);
      self.redirect({ action : '404' });
    });
  } else {
    // this will probably never be called, because `page`
    // won't be undefined, but still...
    this.redirect({ action : '404' });
  }
};
于 2013-12-03T10:31:18.037 に答える