エラーの読み解き方から順を追って説明します。
RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: { errors: [Array] }
at ServerResponse.writeHead (_http_server.js:255:11)
at ServerResponse.writeHead (/Users/**/Desktop/ノート/node_modules/on-headers/index.js:44:26)
at write_ (_http_outgoing.js:685:9)
...
これは
エラークラス名: エラーの説明
at エラーを throw したクラス名.メソッド名 (エラーを throw したファイル名:行番号:列番号)
at ↑のメソッドを呼び出したクラス名.メソッド名 (その呼び出しが書かれたファイル名:行番号:列番号)
at ↑のメソッドを呼び出したクラス名.メソッド名 (その呼び出しが書かれたファイル名:行番号:列番号)
...
と読みます。エラーの発生箇所を探すには、 at 行を上から見ていって、ご自分で作られたファイル名を見つけてください。(目安として、スラッシュを含まないファイル名や /node_modules/
を含むファイル名はライブラリのコードなので読み飛ばせます。)
ご質問のエラーでは /Users/**/Desktop/ノート/app.js:123:11
ですね。つまり app.js の123行目で呼び出されたメソッドがエラーの引き金になっています。
res.redirect('/staffsign',{errors:errors});
この行によって、
RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: { errors: [Array] }
が引き起こされます。 { errors: 配列 }
なる値は status code として不適切である、というエラーです。
意味が分からなければマニュアルを調べます。 res
は Express ライブラリのコードなので、ここを見ます。 http://expressjs.com/ja/api.html#res.redirect
使い方が以下のように説明されています。 res.redirect()
の最後の引数には path を与えるということです。
res.redirect([status,] path)
res.redirect(301, 'http://example.com')
path と status code は関係なさそうですが、ここでエラーメッセージを振り返ると、最初に以下の警告が出ています。
express deprecated res.redirect(url, status): Use res.redirect(status, url) instead app.js:123:11
res.redirect(url, status)
の呼び出し方は古く、非推奨になったので、代わりに res.redirect(status, url)
使うように、とのことです。 今のところは古い呼び出し方でも動くようですね。
ここから、 res.redirect('/staffsign',{errors:errors})
でエラーが出るのは、第2引数を(古い挙動に従って) status として解釈しているからだということが分かります。
さて、いずれにしても、 res.redirect()
は表示したいエラーメッセージ {errors:errors}
を受け取れないことが分かります。リダイレクトはそういうものです。もしリダイレクト先に値を受け渡したいときは Express のセッションに格納するようにしてください。
それよりも、ここではリダイレクトを使う必要はありません。ファイル1と同じく res.render()
を使って以下のように書けば動くと思います。
res.render('staffsign.ejs',{errors:errors})