Как обрабатывать разные действия одного и того же контроллера в Express.JS? - PullRequest
3 голосов
/ 29 ноября 2011

У меня есть много маршрутов, таких как:

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

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

, где page1 и page2 - это два контроллера, а :action - это "метод", который мне нужно вызвать.Страницы должны быть:

  1. / page1 / delete
  2. / page1 / modify
  3. / page1 / add

Я пытаюсьорганизовать мой код, чтобы упростить работу после системы MVC.Может ли кто-нибудь дать мне совет относительно того, как я могу вызвать метод контроллера, прочитав параметр, который я использую как :action Мне нужно проверить, если метод существует, если нет (если кто-то напишет /page1/blablabla), я возвращаю 404 httpошибка.

Спасибо!

1 Ответ

5 голосов
/ 29 ноября 2011

Вот пример того, как этого добиться. Вы можете прочитать больше об этом в руководстве 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;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...