如果POST请求中缺少字段会抛出错误?

时间:2016-10-03 19:17:53

标签: javascript node.js express

我正在写一条注册用户的路线。有三个必填字段,名称,电子邮件和密码。

我该如何处理丢失的字段?

喜欢这个吗?

function(req, res) {

     if(!req.body.name || !req.body.email || !req.body.password) {

         res.status(400).json({
             "message": "All fields required"
         });
        return;

     }
}

或者我应该抛出错误并将其传递给我的错误处理程序,如下所示:

function(req, res, next) {

     if(!req.body.name || !req.body.email || !req.body.password) {

          return next(new Error('All fields required'));

     }
}

4 个答案:

答案 0 :(得分:1)

您可以使用中间件来确保您的终端获得他们应该达到的目标。试试Express Validator

包括:

 var expressValidator = require('express-validator')

然后

app.use(express.bodyParser());
app.use(expressValidator([])); // place after bodyParser

在您的终端,您可以单独检查正文,参数或查询中的字段,如

  req.checkBody('age', 'Invalid Age').notEmpty().isInt(); //required integer
  req.checkBody('name', 'Invalid Name').notEmpty().isAlpha(); //required string
  req.checkBody('name', 'Invalid Name').isAlpha(); // not required but should be string if exists

  //for params use req.checkParams and for query req.checkQuery

 var errors = req.validationErrors();
  if (errors) {
    res.send(errors).status(400);
    return;
  }

或者您可以在单独的文件中定义和使用架构。我们在validationSchemas目录中说userSignUp.js

module.exports = {
'name': { 
    optional: true,
    isLength: {
      options: [{ min: 3, max: 15 }],
      errorMessage: 'Must be between 3 and 15 chars long' 
    },
    errorMessage: 'Invalid Name'
  },
 'email': {
    notEmpty: true,
    isEmail: {
      errorMessage: 'Invalid Email'
    }
  },
  'password': {
    notEmpty: true,
    errorMessage: 'Invalid Password' // Error message for the parameter
  }
}

在验证时:

var userSignUpSchema = require('./validationSchemas/userSignUp.js);

req.checkBody(userSignUpSchema);
      if (req.validationErrors()) {
        res.send(errors).status(400);
        return;
      }

对于每个用例,您都可以添加另一个模式文件并验证字段

答案 1 :(得分:0)

仅用于验证字段是否为空,最好的方法是在前面验证。如果您使用HTML 5,则可以在输入中使用require,这样表单就不会被子设置。但是,在JavaScript中这也不是问题。

答案 2 :(得分:0)

绝对是第一个选择。如果您没有任何错误中间件(尽管不确定),第二个实际上可能会崩溃您的服务器。即使您有错误中间件,它可能默认返回500 - 400是正确的响应。

答案 3 :(得分:0)

对于必填字段,您只需在前端执行操作,而不是检查服务器并加载更多内容。有多种方法可以做到这一点。在HTML中,有一个required属性,您可以将其设置为true,并且在填写所有这些必填字段之前,它不会提交表单。

为了更好地控制错误的处理方式,您可以在提交表单时使用表单验证方法验证表单,以检查空和/或无效字段(表单验证)。这可以使用jQuery,普通的旧JS,角度或您希望在客户端使用的任何内容来完成。

如果你想将它完全保留在服务器端,那么你要检查空对象属性并返回错误JSON的第一个选项就是我如何做到这一点。