首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JOI [ValidationError]验证req.body时

JOI [ValidationError]验证req.body时
EN

Stack Overflow用户
提问于 2021-06-26 15:15:55
回答 1查看 1.2K关注 0票数 0

你好,我正在学习节点的基础知识。我要验证从html表单传递到post请求的数据。数据正在传递,但我也在控制台中得到一个错误。

这里是服务器代码:

代码语言:javascript
运行
复制
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) (带有示例数据:用户名:测试和密码:)

代码语言:javascript
运行
复制
[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:

代码语言:javascript
运行
复制
    <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>
EN

回答 1

Stack Overflow用户

发布于 2021-06-26 16:39:18

该错误清楚地表明req.body是一个数组。

代码语言:javascript
运行
复制
[
    { name: 'username', value: 'test' },
    { name: 'password', value: 'test' }
]

jQuery文档页面,我们也有.serializeArray() method creates a JavaScript array of objects。所以,您实际上是在向服务器端发送一个对象数组,这就是您有错误的原因。

为了解决这个问题,我认为你应该修改前端部分。由于您已经拥有了express.urlencoded(),所以可以使用串行化

代码语言:javascript
运行
复制
  <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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68143706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档