你好,我正在学习节点的基础知识。我要验证从html表单传递到post请求的数据。数据正在传递,但我也在控制台中得到一个错误。
这里是服务器代码:
app.post('/', (req, res)=> {
const schema = Joi.object({
username: Joi.string().trim().required(),
password: Joi.string().min(3).max(10).required(),
})
const validation = schema.validate(req.body);
console.log(req.body)
if(validation.error){
console.log(validation.error)
// res.send('an error has occurred')
}
res.send('successfully posted data')
})
控制台错误test) (带有示例数据:用户名:测试和密码:)
[Error [ValidationError]: "value" must be of type object] {
_original: [
{ name: 'username', value: 'test' },
{ name: 'password', value: 'test' }
],
details: [
{
message: '"value" must be of type object',
path: [],
type: 'object.base',
context: [Object]
}
]
}
我不明白为什么我得到一个验证错误。当req.body与console.log(req.body)一起打印到控制台时,它似乎是一个对象,但是当我尝试使用验证时,它会出现在数组中?有点困惑。
附加信息:如果这重要的话,我正在使用express.urlencoded()和express.json()。
这里是HTML页面中的JQuery:
<script>
$(document).ready(()=>{
$('#form').submit((e)=>{
e.preventDefault();
$.ajax({
url: '/',
type: 'post',
contentType: 'application/json',
data: JSON.stringify($('#form').serializeArray()),
success: (response)=>{
console.log('successfully got response');
console.log(response)
}
})
})
});
</script>
发布于 2021-06-26 16:39:18
该错误清楚地表明req.body
是一个数组。
[
{ name: 'username', value: 'test' },
{ name: 'password', value: 'test' }
]
从jQuery文档页面,我们也有.serializeArray() method creates a JavaScript array of objects
。所以,您实际上是在向服务器端发送一个对象数组,这就是您有错误的原因。
为了解决这个问题,我认为你应该修改前端部分。由于您已经拥有了express.urlencoded()
,所以可以使用串行化。
<script>
$(document).ready(()=>{
$('#form').submit((e)=>{
e.preventDefault();
$.ajax({
url: '/',
type: 'post',
contentType: 'application/json',
data: JSON.stringify($('#form').serialize()),
success: (response)=>{
console.log('successfully got response');
console.log(response)
}
})
})
});
</script>
https://stackoverflow.com/questions/68143706
复制相似问题