如何在Node.js和Express中验证请求体,是否可以不使用库?

10

我有以下代码,并且有一个开发者告诉我必须验证我的请求:

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)进行验证 - 这样可以吗?

是否有原生的内置于node.js和express中用于请求验证的方法?

还是最好使用像express-validator这样的库?


1
可以推荐Joi,但express-validator也不错。它比编写自己的验证器要好得多。 - Xeelley
4个回答

27

2

抱歉回复晚了!不幸的是,ExpressJs没有内置验证功能。您可以使用Zod来验证您的请求(参数、查询或正文)有效负载,通过创建自定义中间件或使用类似zod-express-middleware的包。


1
如上所述,Express.js没有自己内置的验证器。您可以使用这个库simple-body-validator来进行检查,它提供了类似于Laravel验证的体验。请注意,保留HTML标签,不做解释。

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接