【问题标题】:Typescript and Express Validator custom validation typesTypescript 和 Express Validator 自定义验证类型
【发布时间】:2019-04-20 11:27:55
【问题描述】:

使用 express 验证器的自定义方法时出现错误

Argument of type '(userDoc: User | null) => Promise<never> | undefined' is not assignable to parameter of type '(value: User | null) => PromiseLike<never>'.
  Type 'Promise<never> | undefined' is not assignable to type 'PromiseLike<never>'.
    Type 'undefined' is not assignable to type 'PromiseLike<never>'.

import express from 'express';
import { body } from 'express-validator/check'
import User from '../models/User';

import { login, signUp } from '../controllers/auth';
const router = express.Router();

router.post(
  '/sign-up',
  [
    body('username', 'User Name should be atlest 4 characters long')
      .isLength({ min: 4 })
      .isString()
      .trim()
    .custom((username: string, { req }) => {
      return User.findOne({ username }).then(userDoc => {
        if (userDoc) {
          return Promise.reject('User Name is already taken');
        }
      });
    })
  ],
  signUp,
);

【问题讨论】:

  • 这段代码没有任何问题。请发布有关您致电body() 的上下文的更多详细信息。
  • 有条件的在if之后尝试return Promise.resolve(),如果没有找到用户,你应该返回一个Promise对象。
  • 它起作用了,但你能解释一下为什么吗?

标签: typescript express express-validator


【解决方案1】:

您实现User.findOne 的方式返回一个Promise。这就是你使用Promise.reject 来抛出错误的原因。因此,如果验证成功,您也必须返回一个 Promise 对象。

if (userDoc) {
    return Promise.reject('User Name is already taken');
}
return Promise.resolve()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2015-12-04
    • 2014-04-06
    • 2013-07-11
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多