npm的"validator"和"express-validator"有何区别?

5
2个回答

10

它们用于不同的场景:

  • validator是一个库,可用于验证任何类型的对象,并且与任何框架都没有关联。

  • express-validator使用validator库来验证expressjs路由。基本上,您可以使用validator库直接验证express路由。

在我诚实的意见中,您可以轻松创建自己的验证器中间件。特别是如果您刚接触Node.js,它将帮助您理解中间件如何工作。如果您对此不感兴趣,并且拥有一个express应用程序,请随意使用express-validator

此外,我真正推荐JOI作为验证器库https://github.com/hapijs/joi 它简单易用且功能强大。

下面是一个中间件示例(未经测试)

const Joi = require('joi')
module.exports = function validate(joiSchema) {
  return async (req, res, next) => {
    const result = Joi.validate(req.body, joiSchema, {
      allowUnknown: true,
      abortEarly: false
    })

    if (result.error) {
      throw new result.error
    }

    await next()
  }
}

  // express route
  router.post(
    '/create',
    validateMiddleware({
      body: {
        body: { firstName: Joi.string(), lastName: Joi.string() }
      }
    }),
    (req, res, next) => {
    // your logic
   })

嗨,@Marco,感谢您的反馈。我明白了。在不同的场景下实现的易用性和性能问题如何?使用基本验证器库是否更好? - hotchoco
我已经更新了我的答案,为您提供了一个使用Joi实现验证中间件的示例。如果您想了解中间件概念,可以阅读此链接:https://expressjs.com/en/guide/writing-middleware.html,这将有助于您在未来处理其他类型的中间件(身份验证/日志记录/缓存)。 - Marco Talento
如果您不想“重新发明轮子”,那么使用express-validator或https://github.com/continuationlabs/celebrate是由众多测试验证的,可以用于验证您的Express路由。这取决于您。 - Marco Talento
我明白了。我会阅读你所有的建议并学习它们。非常感谢你的帮助,@Marco。 - hotchoco

0

Express-validator是用作中间件的,使用express-validator的想法是在到达控制器之前检查不良输入。

现在,如果您正在使用验证器,您可以创建自己的验证函数,在其中只需传递数据即可告诉它输入是否符合要求(就像检查电子邮件一样,这里您可以有一个函数,它将检查输入是否为函数)。

如果您的结构中使用了服务,则可以使用验证器,因为我认为它比express-validator更容易控制。


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