我正在写一条注册用户的路线。有三个必填字段,名称,电子邮件和密码。
我该如何处理丢失的字段?
喜欢这个吗?
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'));
}
}
答案 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的第一个选项就是我如何做到这一点。