服务器端不能像本地一样工作?"/>
为什么相同的代码在服务器端不能像本地一样工作?
一些 api 在本地运行良好,但该 api 在服务器端不起作用。
例如
本地端响应:
服务器端响应:
这是业务逻辑。如何解决这个问题?
async fullSignup(req, res, next) {
const adminDetailSchema = Joi.object({
// admin signUp valildation
username: Joi.string().min(3).max(30).required().regex(/^\w+$/).messages({
"string.base": "Username must be a string",
"string.empty": "Username cannot be empty",
"string.min": "Username must have at least {{#limit}} characters",
"string.max": "Username must have at most {{#limit}} characters",
"string.pattern.base":
"Username must only contain letters, numbers, or underscores",
"any.required": `Username is a required field`,
}),
email: Joi.string().email().required().messages({
"string.base": `Email should be a type of 'text'`,
"string.empty": `Email cannot be empty`,
"string.email": `Please enter a valid email address`,
"any.required": `Email is a required field`,
}),
password: Joi.string()
// .pattern(new RegExp(/^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9]).{8,}$/))
.min(5)
.required()
.messages({
// "string.pattern.base": `Password must be between 8 characters and can only contain letters, numbers and 1-capital letter, 1-special character`,
"string.min": "Password must have at least {{#limit}} characters",
"string.empty": `Password cannot be empty`,
"any.required": `Password is a required field`,
}),
// admin details valildation
name: Joi.string().required().messages({
"string.base": "name filed must be a string",
"string.empty": "name cannot be empty",
"any.required": `name is a required field`,
}),
company_name: Joi.string().required().messages({
"string.base": "company_name filed must be a string",
"string.empty": "company_name cannot be empty",
"any.required": `company_name is a required field`,
}),
phone_number: Joi.string()
.pattern(/^\+?[1-9]\d{1,9}$/)
.min(10)
.message("phone_number length must be at least 10 Digits")
.required()
.messages({
"string.base": "phone_number filed must be a string",
"string.empty": "phone_number cannot be empty",
"string.pattern.base": "Please enter a valid phone number",
"any.required": `phone_number is a required field`,
}),
address: Joi.string().required().messages({
"string.base": "address filed must be a string",
"string.empty": "address cannot be empty",
"any.required": `address is a required field`,
}),
city: Joi.string().required().messages({
"string.base": "city filed must be a string",
"string.empty": "city cannot be empty",
"any.required": `city is a required field`,
}),
pincode: Joi.number().optional().messages({
"number.base": "pincode filed must be a number",
// "number.empty": "pincode cannot be empty",
// "any.required": `pincode is a required field`,
}),
image: Joi.string()
.pattern(/\.(jpg|jpeg|png)$/i)
// .required()
.max(5242880) // 5MB in bytes
.messages({
"string.pattern.base": "Image must be a valid JPEG, JPG, or PNG file",
"string.max": "Image size must be less than 5MB",
}),
}).options({ abortEarly: false });
const { error } = adminDetailSchema.validate(req.body);
if (error) {
return next(error);
}
let {
email,
password,
username,
name,
company_name,
phone_number,
address,
city,
pincode,
} = req.body;
// ! signup data
try {
// ? check valid email
let doc = await emailValidator.validate(email);
if (!doc.valid)
return next(CustomeErrorHandler.validation("Enter valid email!"));
// ? query of username validation
let usernameQuery = await client.query(
`SELECT username FROM accounts WHERE username = '${username}'`
);
if (usernameQuery.rows.length > 0) {
return next(
CustomeErrorHandler.alreadyExist("username is already exist")
);
}
// ? query of email validation
let emailQuery = await client.query(
`SELECT email FROM accounts WHERE email = '${email}'`
);
if (emailQuery.rows.length > 0) {
return next(CustomeErrorHandler.alreadyExist("email is already exist"));
}
} catch (error) {
return next(error);
}
let adminSignup;
try {
// * password hash
const hashedPassword = await bcrypt.hash(password, 10);
// * role
// * admin : 1
// * partner : 0
// ? query of insert user data
let query = await client.query(
`INSERT INTO accounts(username, email, password, role, created_on, updated_on) VALUES('${username}', '${email}', '${hashedPassword}', '${USER_ROLE.ADMIN}', current_timestamp, current_timestamp) RETURNING *`
);
adminSignup = query.rows[0];
delete adminSignup.phone;
const insertAdminQuery = await client.query(
`INSERT INTO admins(account_id, name, company_name, phone_number, address, city, pincode, created_on, updated_on) VALUES('${adminSignup.account_id}', '${name}', '${company_name}', '${phone_number}', '${address}', '${city}', '${pincode}', current_timestamp, current_timestamp) RETURNING *`
);
document = insertAdminQuery.rows[0];
} catch (error) {
return next(error);
}
return res.status(200).json({
apiCode: "WM036?",
statusCode: 200,
msg: commonMessages.createSuccfully,
data: { ...adminSignup, originalPassword: password, ...document },
});
},
重新安装所有库并在服务器上恢复。 但它仍然是那个错误。
回答如下:更多推荐
为什么相同的代码在服务器端不能像本地一样工作?
发布评论