如何确保此函数正确处理错误?

时间:2019-05-22 19:23:52

标签: javascript express error-handling

我有一个检查快速应用程序中用户输入的功能。我不想使用任何库来验证这些输入,所以我声明了一个将错误推入其中的数组。

我已将中间件功能作为静态方法嵌入到类中...

static postAdchecker(req, res, next) {
        let { state, price, manufacturer, model, bodytype } = req.body;
        console.log('req', req.body);
         const errors = [];

         // If state is empty or undefined throw this error
         if (!state) {
             console.log('state', state);
             const error = {
                 message: 'Please specify the state of the car'
             };
             errors.push(error);
         }

         // If state is supplied, convert it to lowercase, trim and check if value is new/used
         if (state.toLowerCase().trim() !== 'new' && state.toLowerCase().trim() !== 'used') {
            const error = {
                message: 'State can only be new or used'
            };
            errors.push(error);
        }

        // Same goes for the others.
        if (!price) {
            const error = {
                message: 'You will need to specify a sale price'
            };
            errors.push(error);
        }

        if (!manufacturer) {
            const error = {
                message: 'Specify a manufacturer'
            };
            errors.push(error);
        }

        if (!model) {
            const error = {
                message: 'Specify a model'
            };
            errors.push(error);
        }

        if (!bodytype) {
            const error = {
                message: 'You will need to specify a bodytype'
            };
            errors.push(error);
        }

        return res.status(400).json({
            status: 400,
            errors: { 
                body: errors.map(err => err.message) 
               }
        });

         console.log('errors', errors);
         req.body.state = state.toLowerCase().trim();
         req.body.price = price.toLowerCase().trim();
         req.body.manufacturer = manufacturer.toLowerCase().trim();
         req.body.model = model.toLowerCase().trim();
         req.body.bodytype = bodytype.toLowerCase().trim();
         // req.authData;
         return next(); 

     }

如何实现以下目标?

  • 将输入字段中的值转换为小写并在提供时进行修整。
  • 出现错误时,请返回所有错误。
  • 没有错误时,将操作转移到下一个函数,而不是返回空数组。

1 个答案:

答案 0 :(得分:1)

您只是缺少一种情况:

 if(errors.length) { // <<<
   return res.status(400).json({
        status: 400,
        errors: { 
            body: errors.map(err => err.message) 
           }
      });
}