Next.js apiのレスポンス 注意点
要点
- Node.jsのhttpモジュールについて
- httpモジュールでレスポンスが返されるタイミング
- httpモジュールでレスポンスを返すときのbodyの値の入れ方
修正前
export default (req: any, res: any) => {
res.clearPreviewData();
res.status(200).json({ message: 'Preview data cleared.' });
res.writeHead(307, { Location: '/' });
res.end();
};
修正後
export default (req, res) => {
// プレビューモードのcookieを削除する
res.clearPreviewData();
// リダイレクト先を設定する
res.writeHead(307, { Location: '/' });
res.end();
};
問題点
レスポンスについて理解してなかった。
というかNode.jsのhttpモジュールについて理解してなかった。
resなどはNode.jsのコアモジュールであり、Next.jsはそれを継承している。
今回の課題は、res.status(200)で一度レスポンスを返した後、res.end()で2回目のレスポンスを返している。
res.status()について
res.status()はレスポンスのステータスコードを設定するメソッド。
このメソッドを呼び出した後にres.send()やres.json()などを使ってレスポンスの内容を追加することが出来る。
res.status()だけを呼び出した場合はレスポンスのボディは空になる。
res.end()について
res.end()が記述された時点でレスポンスが返される。
それ以降に何も処理は入れられない。