typescript - Typescript 和 Express Validator 自定义验证类型
问题描述
使用 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,
);
解决方案
你实现的方式User.findOne
返回一个 Promise。这就是为什么您使用Promise.reject
它来引发错误。因此,如果验证成功,您也必须返回一个 Promise 对象。
if (userDoc) {
return Promise.reject('User Name is already taken');
}
return Promise.resolve()
推荐阅读
- java - 使用@NamedEntityGraphs 注解时如何避免“代码异味”?
- python - Python 的 range() 函数是重载的内置函数吗?
- node.js - 我已将 nodejs 后端集成到 reactjs 前端
- swiftui - 缩放图像以适应某些尺寸并保持纵横比 SwiftUI
- reactjs - 如何在 React.Js 中将 FooterLink 路由到 InfoSection?
- javascript - 使用 React JS 中的复选框创建一个选定行的数组
- javascript - convert in to int to string
- react-native - 节点包的 mainBundlePath 为 Null
- python - 需要在 python 中创建或不创建类的情况下获取实例变量及其默认值
- reactjs - 是否需要在 facebook、twitter 或 LinkedIn 上注册 og:gatsby react 应用程序的标签?