Node.js 捕获;无法查找视图“0”;错误和服务404

Node.js 捕获;无法查找视图“0”;错误和服务404,node.js,express,locomotivejs,Node.js,Express,Locomotivejs,我当前正在将以前的路由中找不到的每一页路由到我的pagesController,方法是将此行包含在routes.js中: this.match('/:page', { controller: 'pages', action: 'show' }); 我想让我的PagesController处理404服务,如果找不到: PagesController.show = function() { var page = this.param('page'); if(page != unde

我当前正在将以前的路由中找不到的每一页路由到我的pagesController,方法是将此行包含在routes.js中:

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;
};

但我的想法失败了。错误无法被捕获,因此致命错误仍然会得到处理。我应该在渲染调用中附加fn吗?用什么论据?它是如何工作的?(/简单的问题)。

它可能看起来像这样:

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

非常感谢你。它工作得很好!标准化的编码风格(单引号,!==)也唤醒了我。非常感谢。啊,我遇到了麻烦。“return self.res.send(html);”在函数(err,html)中,因此它实际上不会停止PageController.show函数。最终,每个请求仍然会被重定向到404。最后一行应该可以走了,对吧?也在本地完成,谢谢!在一次所有东西都转到404后,我吓坏了一些同事。一切又好又干净了