TypeError: Expected string but received a undefined
TypeError: Expected string but received a undefined
在将其发布到 mongodb 数据库之前验证名称和密码时,它显示了一些错误
const Validator = require('validator');
const isEmpty = require('./is-empty');
module.exports = function validateRegisterInput(data){
let errors = {};
data.name = !isEmpty(data.name) ? data.name : '';
data.email = !isEmpty(data.email) ? data.email : '';
data.password = !isEmpty(data.password) ? data.password : '';
data.password = !isEmpty(data.password2) ? data.password2 : '';
if((!Validator.isLength(data.name , { min:2, max:20 }))){
errors.name = 'Name must be between 2 and 20 characters';
}
if(Validator.isEmpty(data.name)){
errors.name ='Name field is required';
}
if(Validator.isEmpty(data.email)){
errors.email ='Email field is required';
}
if(Validator.isEmail(data.email)){
errors.email ='Email is invalid';
}
if(Validator.isEmpty(data.password)){
errors.password ='Password field is required';
}
if(Validator.isLength(data.password, {min:8 })){
errors.password ='Password field is required';
}
if(Validator.isEmpty(data.password2)){
errors.password2 ='Confirm Passwords field is required';
}
if(Validator.equals(data.password, data.password2)){
errors.password2 = 'Passwords must match';
}
return {
errors,
isValid: isEmpty(errors)
};
};
postman 中显示错误
TypeError: Expected string but received a undefined.
at assertString (E:\MERN\devconnector\node_modules\validator\lib\util\assertString.js:28:11)
at Object.isEmpty (E:\MERN\devconnector\node_modules\validator\lib\isEmpty.js:19:29)
at validateRegisterInput (E:\MERN\devconnector\validation\register.js:38:18)
at router.post (E:\MERN\devconnector\routes\api\users.js:27:33)
at Layer.handle [as handle_request] (E:\MERN\devconnector\node_modules\express\lib\router\layer.js:95:5)
at next (E:\MERN\devconnector\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (E:\MERN\devconnector\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (E:\MERN\devconnector\node_modules\express\lib\router\layer.js:95:5)
at E:\MERN\devconnector\node_modules\express\lib\router\index.js:281:22
at Function.process_params (E:\MERN\devconnector\node_modules\express\lib\router\index.js:335:12)
at next (E:\MERN\devconnector\node_modules\express\lib\router\index.js:275:10)
at Function.handle (E:\MERN\devconnector\node_modules\express\lib\router\index.js:174:3)
at router (E:\MERN\devconnector\node_modules\express\lib\router\index.js:47:12)
at Layer.handle [as handle_request] (E:\MERN\devconnector\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (E:\MERN\devconnector\node_modules\express\lib\router\index.js:317:13)
at E:\MERN\devconnector\node_modules\express\lib\router\index.js:284:7
请检查您在 isEmpty.js 文件中声明 isEmpty 函数的位置,您可能使用了箭头函数,这不应该。
const isEmpty = value => {
value === undefined ||
value === null ||
(typeof value === "Object" && Object.keys(value).length === 0) ||
(typeof value === "string" && value.trim().length === 0)
}
所以,把箭头函数“{}”末尾的花括号去掉,它不应该在那里。
尝试添加这个:
data.password**2** = !isEmpty(data.password2) ? data.password2 : '';
您必须添加
if("HERE"Validator.equals(data.password, data.password2)){
errors.password2 = 'Passwords must match';
}
并在第 10
行将 "data.password"
更改为 data.password2
我也遇到过类似的事情。我正在验证一个名为 'name' 的密钥,但在邮递员上我发送的是 'username'.
仔细检查您在邮递员中的密钥是否与您的 data.whatever
完全匹配
我建议以JSON格式写入数据,然后检查content-type应该是application/json。我遇到了同样的问题,我按照我提到的方式解决了它。
如果您正在编写多行箭头函数,那么我们应该有明确的 return 值或结果。
const isEmpty = value => {
return (value === undefined ||
value === null ||
(typeof value === "Object" && Object.keys(value).length === 0) ||
(typeof value === "string" && value.trim().length === 0))
};
module.exports = isEmpty;
注意:请参阅 ES6 文档以获得清晰度:http://es6-features.org/
看到您使用 Validator 包,我理解您想要实现的目标,因为我刚刚从我得到的这个重复 TypeErrors
中解脱出来。我也有一些拼写错误,我必须更正。所以确保你没有。
在这种情况下,我将以这种方式编写代码。它有点冗长,我会尽快重构它,我现在刚得到这个,当我看到这个问题时,我想提供我的意见。
const Validator = require("validator");
const isEmpty = require("./is-empty");
// we cant use isEmpty from validator pkg as it needs its param to be a string
// data is req.body
module.exports = function validateRegisterInput(data) {
let errors = {};
data.name = isEmpty(data.name) ? "" : data.name;
data.email = isEmpty(data.email) ? "" : data.email;
data.password = isEmpty(data.password) ? "" : data.password;
data.password2 = isEmpty(data.password2) ? "" : data.password2;
if (!Validator.isLength(data.name, { min: 2, max: 30 })) {
errors.name = "Name must be between 2 and 30 characters";
}
if (Validator.isEmpty(data.name)) {
errors.name = "Name field is required";
}
if (Validator.isEmpty(data.email)) {
errors.email = "Email field is required";
}
// runs if not in email exists but not in format
if (!Validator.isEmpty(data.email) && !Validator.isEmail(data.email)) {
errors.email = "Email is invalid";
}
if (Validator.isEmpty(data.password)) {
errors.password = "Password field is required";
}
// runs if password exists but not in proper format
if (
!Validator.isEmpty(data.password) &&
!Validator.isLength(data.password, { min: 6, max: 30 })
) {
errors.password = "Password must be at least 6 chracters";
}
if (Validator.isEmpty(data.password2)) {
errors.password2 = "Password 2 is required";
}
// runs if not in password 2 exists but not in format
if (
!Validator.isEmpty(data.password2) &&
!Validator.equals(data.password, data.password2)
) {
errors.password2 = "Passwords must match";
}
return { errors, isValid: isEmpty(errors) };
};
我遇到了同样的问题,我通过在检查(isEmail、isLength、...)之前检查字段是否为(isEmpty)来修复它
例如:
if (!Validator.isLength(data.name, { min: 2, max: 30 })) {
errors.name = "Name must be between 2 and 30 characters"
}
变成:
if (
!Validator.isEmpty(data.name) &&
!Validator.isLength(data.name, { min: 2, max: 30 })
) {
errors.name = "Name must be between 2 and 30 characters";
}
在将其发布到 mongodb 数据库之前验证名称和密码时,它显示了一些错误
const Validator = require('validator');
const isEmpty = require('./is-empty');
module.exports = function validateRegisterInput(data){
let errors = {};
data.name = !isEmpty(data.name) ? data.name : '';
data.email = !isEmpty(data.email) ? data.email : '';
data.password = !isEmpty(data.password) ? data.password : '';
data.password = !isEmpty(data.password2) ? data.password2 : '';
if((!Validator.isLength(data.name , { min:2, max:20 }))){
errors.name = 'Name must be between 2 and 20 characters';
}
if(Validator.isEmpty(data.name)){
errors.name ='Name field is required';
}
if(Validator.isEmpty(data.email)){
errors.email ='Email field is required';
}
if(Validator.isEmail(data.email)){
errors.email ='Email is invalid';
}
if(Validator.isEmpty(data.password)){
errors.password ='Password field is required';
}
if(Validator.isLength(data.password, {min:8 })){
errors.password ='Password field is required';
}
if(Validator.isEmpty(data.password2)){
errors.password2 ='Confirm Passwords field is required';
}
if(Validator.equals(data.password, data.password2)){
errors.password2 = 'Passwords must match';
}
return {
errors,
isValid: isEmpty(errors)
};
};
postman 中显示错误
TypeError: Expected string but received a undefined.
at assertString (E:\MERN\devconnector\node_modules\validator\lib\util\assertString.js:28:11)
at Object.isEmpty (E:\MERN\devconnector\node_modules\validator\lib\isEmpty.js:19:29)
at validateRegisterInput (E:\MERN\devconnector\validation\register.js:38:18)
at router.post (E:\MERN\devconnector\routes\api\users.js:27:33)
at Layer.handle [as handle_request] (E:\MERN\devconnector\node_modules\express\lib\router\layer.js:95:5)
at next (E:\MERN\devconnector\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (E:\MERN\devconnector\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (E:\MERN\devconnector\node_modules\express\lib\router\layer.js:95:5)
at E:\MERN\devconnector\node_modules\express\lib\router\index.js:281:22
at Function.process_params (E:\MERN\devconnector\node_modules\express\lib\router\index.js:335:12)
at next (E:\MERN\devconnector\node_modules\express\lib\router\index.js:275:10)
at Function.handle (E:\MERN\devconnector\node_modules\express\lib\router\index.js:174:3)
at router (E:\MERN\devconnector\node_modules\express\lib\router\index.js:47:12)
at Layer.handle [as handle_request] (E:\MERN\devconnector\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (E:\MERN\devconnector\node_modules\express\lib\router\index.js:317:13)
at E:\MERN\devconnector\node_modules\express\lib\router\index.js:284:7
请检查您在 isEmpty.js 文件中声明 isEmpty 函数的位置,您可能使用了箭头函数,这不应该。
const isEmpty = value => {
value === undefined ||
value === null ||
(typeof value === "Object" && Object.keys(value).length === 0) ||
(typeof value === "string" && value.trim().length === 0)
}
所以,把箭头函数“{}”末尾的花括号去掉,它不应该在那里。
尝试添加这个:
data.password**2** = !isEmpty(data.password2) ? data.password2 : '';
您必须添加
if("HERE"Validator.equals(data.password, data.password2)){
errors.password2 = 'Passwords must match';
}
并在第 10
行将"data.password"
更改为 data.password2
我也遇到过类似的事情。我正在验证一个名为 'name' 的密钥,但在邮递员上我发送的是 'username'.
仔细检查您在邮递员中的密钥是否与您的 data.whatever
完全匹配我建议以JSON格式写入数据,然后检查content-type应该是application/json。我遇到了同样的问题,我按照我提到的方式解决了它。
如果您正在编写多行箭头函数,那么我们应该有明确的 return 值或结果。
const isEmpty = value => {
return (value === undefined ||
value === null ||
(typeof value === "Object" && Object.keys(value).length === 0) ||
(typeof value === "string" && value.trim().length === 0))
};
module.exports = isEmpty;
注意:请参阅 ES6 文档以获得清晰度:http://es6-features.org/
看到您使用 Validator 包,我理解您想要实现的目标,因为我刚刚从我得到的这个重复 TypeErrors
中解脱出来。我也有一些拼写错误,我必须更正。所以确保你没有。
在这种情况下,我将以这种方式编写代码。它有点冗长,我会尽快重构它,我现在刚得到这个,当我看到这个问题时,我想提供我的意见。
const Validator = require("validator");
const isEmpty = require("./is-empty");
// we cant use isEmpty from validator pkg as it needs its param to be a string
// data is req.body
module.exports = function validateRegisterInput(data) {
let errors = {};
data.name = isEmpty(data.name) ? "" : data.name;
data.email = isEmpty(data.email) ? "" : data.email;
data.password = isEmpty(data.password) ? "" : data.password;
data.password2 = isEmpty(data.password2) ? "" : data.password2;
if (!Validator.isLength(data.name, { min: 2, max: 30 })) {
errors.name = "Name must be between 2 and 30 characters";
}
if (Validator.isEmpty(data.name)) {
errors.name = "Name field is required";
}
if (Validator.isEmpty(data.email)) {
errors.email = "Email field is required";
}
// runs if not in email exists but not in format
if (!Validator.isEmpty(data.email) && !Validator.isEmail(data.email)) {
errors.email = "Email is invalid";
}
if (Validator.isEmpty(data.password)) {
errors.password = "Password field is required";
}
// runs if password exists but not in proper format
if (
!Validator.isEmpty(data.password) &&
!Validator.isLength(data.password, { min: 6, max: 30 })
) {
errors.password = "Password must be at least 6 chracters";
}
if (Validator.isEmpty(data.password2)) {
errors.password2 = "Password 2 is required";
}
// runs if not in password 2 exists but not in format
if (
!Validator.isEmpty(data.password2) &&
!Validator.equals(data.password, data.password2)
) {
errors.password2 = "Passwords must match";
}
return { errors, isValid: isEmpty(errors) };
};
我遇到了同样的问题,我通过在检查(isEmail、isLength、...)之前检查字段是否为(isEmpty)来修复它
例如:
if (!Validator.isLength(data.name, { min: 2, max: 30 })) {
errors.name = "Name must be between 2 and 30 characters"
}
变成:
if (
!Validator.isEmpty(data.name) &&
!Validator.isLength(data.name, { min: 2, max: 30 })
) {
errors.name = "Name must be between 2 and 30 characters";
}