如何在Express.JS中处理同一个Controller的不同动作?

时间:2011-11-29 13:02:30

标签: node.js express

我有很多路线,如:

//routes
app.get("page1/:action", function(req, res) {
  ...
}

app.get("page2/:action", function(req, res) {
  ...
}

其中page1page2是两个控制器,而:action是我需要调用的“方法”。页面应为:

  1. / page1 / delete
  2. / page1 / modify
  3. /第1页/添加
  4. 我尝试组织我的代码以简化MVC系统之后的工作。 有人可以给我一个建议,如何通过读取我用作:action的参数来调用控制器的方法我需要检查方法是否存在(如果有人写/page1/blablabla)我返回404 http错误。

    谢谢!

1 个答案:

答案 0 :(得分:5)

以下是如何实现这一目标的示例。您可以在Expressjs指南上阅读更多相关信息:http://expressjs.com/guide/error-handling.html

function NotFound(msg){
  this.name = 'NotFound';
  Error.call(this, msg);
  Error.captureStackTrace(this, arguments.callee);
}
NotFound.prototype.__proto__ = Error.prototype;

//routes
app.get("page1/:action", function(req, res) {
  switch(req.params.action) {
    case 'delete':
      // delete 'action' here..
      break;
    case 'modify':
      // delete 'modify' here..
      break;
    case 'add':
      // delete 'add' here..
      break;
    default:
      throw new NotFound(); // 404 since action wasn't found
      // or you can redirect
      // res.redirect('/404');
  }
}

app.get('/404', function(req, res){
  throw new NotFound;
});