用户注册时触发isStrongPassword is not a function错误求助
问题解决:isStrongPassword is not a function
错误原因
你的代码存在两个核心问题:
- 导入错误:
isStrongPassword没有通过require导入,导致它只是一个字符串,而非可调用的函数。 - 规则不匹配:即便导入正确,validator库的
isStrongPassword默认规则和你需要的(8字符、1大写、1小写、1数字、1符号)不完全一致,需要手动配置参数。
修复步骤
1. 修正导入语句
把原来的:
const isStrongPassword = ("validator/lib/isStrongPassword");
替换为:
const isStrongPassword = require("validator/lib/isStrongPassword");
2. 配置自定义密码验证规则
调用isStrongPassword时传入规则参数,确保符合你的要求:
else if (!isStrongPassword(req.body.password, { minLength: 8, minUppercase: 1, minLowercase: 1, minNumbers: 1, minSymbols: 1 })) { return next( createError( 400, "Invalid password: Min 8 characters, 1 uppercase, 1 lowercase, 1 number, 1 symbol" ) ); }
完整修正后的核心代码片段
const isEmail = require("validator/lib/isEmail.js") const isStrongPassword = require("validator/lib/isStrongPassword"); //REGISTER router.post("/register", async (req, res, next) => { try { if (!req.body.username) { return next(createError(400, "Invalid username")); } if (!req.body.email || !isEmail(req.body.email)) { return next(createError(400, "Invalid email")); } if (!req.body.password) { return next(createError(400, "Invalid password")); } else if (!isStrongPassword(req.body.password, { minLength: 8, minUppercase: 1, minLowercase: 1, minNumbers: 1, minSymbols: 1 })) { return next( createError( 400, "Invalid password: Min 8 characters, 1 uppercase, 1 lowercase, 1 number, 1 symbol" ) ); } else { // 后续用户检查、密码加密、保存逻辑保持不变 const checkUsername = await User.findOne({ username: req.body.username }); const checkEmail = await User.findOne({ email: req.body.email }); if (checkUsername) { return next(createError(400, "Username taken")); } else if (checkEmail) { return next(createError(400, "Email taken")); } else { const salt = await bcrypt.genSalt(10); const hashedPass = await bcrypt.hash(req.body.password, salt); const newUser = new User ({ username: req.body.username, firstName: req.body.firstName, lastName: req.body.lastName, email: req.body.email, password: hashedPass, repeatPassword: hashedPass, birthday: req.body.birthday, }); const user = await newUser.save(); res.status(200).json({ message: "Successfully registered", user, }); } } } catch(err) { next(err); } });
内容的提问来源于stack exchange,提问作者sultan.h
相关产品推荐
相关产品推荐

