なっく日報

技術やら生活やらのメモ

Expressでnext('route')をコールしてmiddlewareをスキップしたときに404になる

謎の現象

Expressで↓のような書き方をした際に、

app.post('/hoge', function(req, res, next) {
  console.log('middleware1');
  next('route');
}, fuction(req, res, next) {
  console.log('middleware2');
  next();
}, function(req, res) {
  res.send({});
});

middleware1でnext('route')と書くことで、middleware2をスキップして、最後のres.send()実行されることを期待しますが、 奇妙なことに404エラーになってしまうという現象が起きました。

解決法

stackoverflow.com

にある通り、

app.post('/hoge', function(req, res, next) {
  console.log('middleware1');
  next('route');
}, fuction(req, res, next) {
  console.log('middleware2');
  next();
});
app.post('/hoge', function(req, res) {
  res.send({});
});

とmiddlewareとrouteのハンドラを明確に分ける必要があるとのことです。
最初は上手く動いていた気がするのですが、最近仕様が変わったのだろうか。。

おまけ

routerは「ラウター」とアメリカ英語で発音することを知って、衝撃を受けました。

routerの意味・使い方|英辞郎 on the WEB