Express.jsの同じコントローラーの異なるアクションを処理する方法は?

StackOverflow https://stackoverflow.com/questions/8311164

  •  25-10-2019
  •  | 
  •  

質問

私は次のような多くのルートを持っています:

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

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

どこ page1page2 2つのコントローラーと :action 呼び出す必要がある「方法」です。ページは次のとおりです。

  1. /page1/delete
  2. /page1/変更
  3. /page1/add

MVCシステムに続いてジョブを簡素化するためにコードを整理しようとします。誰かが私にアドバイスを与えてもらえますか? :action そうでない場合は方法が存在するかどうかを確認する必要があります(誰かが書いた場合 /page1/blablabla)404 HTTPエラーを返します。

ありがとうございました!

役に立ちましたか?

解決

これを達成する方法の例を次に示します。これについては、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;
});
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top