如何在 Node.js、Express 中验证请求正文 - 是否可以不使用库?

问题描述 投票:0回答:5

我有代码(如下),一位开发人员对我说我必须验证我的请求:

router.post('/dashboard', passport.authenticate('jwt', { session: false }),
(req, res) => {

    try {
        let newPost = new Post({
            category: req.body.category,
            title: req.body.title,
            photo: req.body.photo,
            text: req.body.text,
            author: req.body.author,
            date: req.body.date
        });

        Post.addPost(newPost, (err, user) => {
            if (err) {
                res.json({success: false, msg: `Post has not been added. ${err}`})
            } else {
                res.json({success: true, msg: 'Post was added.'})
            }
        })
    } catch (err) {
       const error = (res, error) => {
            res.status(500).json({
                success: false,
                message: error.message ? error.message : error
            })
       }

       console.log('error routes/auth POST', res, error)
    }
})

我用谷歌搜索并找到了解决方案,即使用库进行请求验证,例如

express-validator
- 可以吗?

是否有任何原生的、内置的express、node.js方法来验证请求?

或者最好使用像

express-validator
这样的库?

node.js express validation request express-validator
5个回答
29
投票

Express.js 没有内置验证器。 但您可以使用 express-validatorjoi。这两个库都很好。

如果您在项目中使用打字稿class-validator是一个更好的选择,它会让您使用类型。

这是关于为什么需要验证数据的精彩演讲。 认真对待数据验证,作者:Paul Milham


2
投票

这有点晚了! 不幸的是,ExpressJs没有内置验证。您可以使用 Zod 通过创建自定义中间件或使用像 zod-express-middleware

这样的包来验证请求的(参数、查询或正文)有效负载

1
投票

如上所述,Express.js 没有自己的内置验证器。您还可以检查这个库simple-body-validator,它提供了类似于 Laravel 验证的体验


0
投票

我们可以使用 Yup 进行快速验证:https://github.com/jquense/yup

示例:

import * as yup from 'yup'

const userCreateSchema = yup.object({
  email: yup.string().email().required(),
  password: yup.string().required(),
})
const result = await userCreateSchema.validate(req.body)

0
投票

如果您想提供一个 openapi/swagger 文件来发布如何使用您的 api,并让您的服务根据规范中的模型进行验证,那么我建议使用 openapi-backend

© www.soinside.com 2019 - 2024. All rights reserved.