【问题标题】:How to check is user already exist with customValidators in express-validator?如何检查用户是否已经存在于 express-validator 中的 customValidators?
【发布时间】:2017-03-15 13:34:09
【问题描述】:

如果用户在自定义 express-validator 中已经存在或不存在,我在返回布尔值(true 或 false)时遇到问题。 到目前为止,我设法以这种方式工作:

app.use(expressValidator({
    customValidators: {
        isUsernameAvailable: function (username) {
            return User
                    .findOne({ 'username': username })
                    .then(function (user) {
                        if (user) {
                            throw new Error('User already exist')
                        }
                    }
        }
    }

想法是返回boolean(对应名称:isUsernameAvailable)而不是Promise或Object,但我不知道如何。

我用它是这样检查的:

module.exports = {
    create: (req, res) => {
        let user = req.body

        ...
        req.check('username', 'This username is already taken.').isUsernameAvailable()
        ...
    }
}

【问题讨论】:

    标签: node.js express mongoose


    【解决方案1】:

    您还没有描述您的“检查”功能如何知道用户名是否重复,但我会说我想不出一个不需要访问某种形式的可扩展解决方案数据存储(数据库是最常见的)。在 Node 中,这意味着涉及回调或 Promise 的异步调用,除非您真的想努力使其同步。

    老实说,任何具有唯一性要求的多用户应用程序最终都会遇到您所描述的检查问题,因为您的检查和创建步骤不会在单个原子事务中。

    只需将唯一索引应用到数据库中的字段,然后在您的应用代码中适当地处理该错误,这将变得更好且更具可扩展性。

    【讨论】:

      【解决方案2】:

      我花了更多时间来简化和简化代码

      这是我使用的代码

      router.post('/signup', [
              check('username').notEmpty().withMessage('must be not null').
                  .custom((value, {req, loc, path}) => {
                      return Users.findOne({
                          where: {
                              username: req.body.username,
                          }
                      }).then(user => {
                          if (user) {
                              return Promise.reject('Username already in use');
                          }
                      });
                  })
          ], (req, res) => {
              const errors = validationResult(req);
              if (!errors.isEmpty()) {
                  return res.status(422).json({errors: errors.array()});
              } else {
                  // Do everything or create new user
              }
      
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-05
        • 1970-01-01
        • 2015-06-17
        • 2016-08-08
        • 1970-01-01
        • 2019-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多