Requestに適正な値が入ってなかったら400エラーを返す
Global Notification 設定の POST api 作成時のレビューです。
レビュー
notifyToType の値が mail になるか slack になるかによって処理を変えていました。
switch を使用して、notifyToType に適正な値が入ってなかったらエラーを返す想定でした。
しかし、ここで返さなければいけないのは エラーコード 400 です。
HyperText Transfer Protocol (HTTP) の 400 Bad Request レスポンスステータスコードは、何らかのクライアント側のエラーであると分かったために、サーバーがそのリクエストを処理しない (できない) ことを表します1
そして、400 エラーを返すのはバリデーションの責務です。
notification-setting.jsconst validator = { slackConfiguration: [ body('webhookUrl').isString().trim(), body('isIncomingWebhookPrioritized').isBoolean(), body('slackToken').isString().trim(), ], userNotification: [ body('pathPattern').isString().trim(), body('channel').isString().trim(), ], globalNotification: [ body('triggerPath').isString().trim().not() .isEmpty(), body('notifyToType').isString().trim().isIn(['mail', 'slack']), body('toEmail').trim().custom((value, { req }) => { return (req.body.notifyToType === 'mail') ? (!!value && value.match(/.+@.+\..+/)) : true; }), body('slackChannels').trim().custom((value, { req }) => { return (req.body.notifyToType === 'slack') ? !!value : true; }), ], };
validator に globalNotification 追加しました。
Validation Chain である isIn(['mail','slack'])
を使用して notifyToType の値が正しいかチェックしています。
また、 notifyToType の値に応じたカスタムバリデーターも使用しています。
今後 Twitter 通知などで機能を追加するときはバリデーターも修正する必要がありそうです。