所以我有一个带输入字段的html5表单。可以说这些字段是名字,姓氏,电话,电子邮件和地址。
现在首先,最后和地址是必需的,而电话和电子邮件是可选的。我知道后端已正确配置。但是在html5表单上它不会让我提交没有电话或电子邮件,否则它会返回400错误。
如果我从html5表单中删除了该选项,它会让我提交它,或者我可以输入一个值=" "并将提交。我甚至可以使用CSS3标记字段:required和:optional并且它会正确显示但仍然不允许我提交。
现在我显然不能从html中删除可选项,因为有些用户可能需要这些字段,但我也不想发送默认值" "或" n / a"对于不需要它们的用户。我在这里做错了什么或者什么?我不知道发生了什么。
编辑2:这是一个node.js api,它使用Hapi.js和Joi验证,请求和couchdb。
编辑:我知道400是一个服务器错误,但如果我发布一个卷曲,省略了可选的那个,它会很好。当我从html中删除可选的那些时,它也很顺利,这就是为什么它没有意义。这是api的验证码服务器端。
handler: function(req, res) {
request({
method: 'POST',
uri: 'https://127.0.0.1:6984/banned',
jar: cookieJar,
strictSSL: false,
json: {
firstn: req.payload.firstn,
lastn: req.payload.lastn,
licno: req.payload.licno,
phone: req.payload.phone,
email: req.payload.email,
address: req.payload.address,
description: req.payload.description
}
},
function(err, resp, body) {
if (err) { res(err) };
if (resp.statusCode === 401) {
res(resp.statusCode + ' Please log in.');
}
else if (resp.statusCode === 201) {
res(body);
}
});
},
validate: {
payload: {
firstn: Joi.string().required(),
lastn: Joi.string().required(),
licno: Joi.string().optional(),
phone: Joi.string().optional(),
email: Joi.string().optional(),
address: Joi.string().optional(),
description: Joi.string().required()
}
}
答案 0 :(得分:0)
所以一位朋友帮助我搞清楚了。发生的事情是,如果没有输入数据,html表单是否发送值为“”。这不是“”,“null”,“undefined”只是“”。这不是服务器的有效值,因此会引发400错误。修复它的代码是在验证和发送之前检查有效负载是否存在。