async await 出错(至少在我看来是这样)- ExpressJS、MongoDB、NodeJS、multer
Error with async await ( at least in my opinion ) - ExpressJS, MongoDB, NodeJS, multer
这是我在后端的代码(ExpressJs,multer)
注意:我在 server.js 文件中使用了 cors 并且它在之前的路由中按我预期的方式工作,但是在这个 Register Admin 路由中,出现了另一个错误
const multer = require('multer');
const upload = multer({ dest: './public/uploads/' });
const User = require('../models/user.model'); // User model
router.post('/admin/register', upload.single('avatar'),
async (req, res) => {
const avatar = req.file.path.slice(7);
const user = {
...JSON.parse(req.body.user),
avatar
};
// hapi/joi validate => 1
const { error } = Validation.adminRegisterValidation(user);
if (error) {
return res.json({ error: error.details[0].message });
}
// validate from database => 2
const emailExist = await User.findOne({ email: user.email });
if (emailExist) {
return res.json({ error: 'Email already exist!' });
}
// hash the password => 3
const hashedPassword = await bcrypt.hash(user.password, 10);
const newUser = new User({
...user,
admin: false,
password: hashedPassword,
sub_admin: true
});
try {
await newUser.save();
return res.json("Add user success!");
} catch (err) {
return res.json({ error: err });
}
}
);
If i turn 1,2,3 to comment, the user is added as I expected
这个项目在我的GithubGithub
- 文件中的前端:src -> 组件 -> 仪表板 -> 用户仪表板 -> CreateUser.js
- 文件中的后端:后端 -> 路由 -> user.route.js
这是我的错误图片
好吧,我发现了两个可能导致您的问题的错误,不确定它是否能完全解决您的问题,但肯定会让您满意。
1) 从 user schema
中删除 Max
长度 属性
现在您 max
的密码长度为 30 user Schema
,但是一旦您对密码进行哈希处理,哈希后的密码可以超过 30 个字符。
你可以点击here看看我在说什么
2) 您需要删除 old password
才能存储新的 hashed password
在这行代码中,您使用 Spread Syntax 来包含来自 user
对象的 NewUser
对象中的所有字段,该对象已经包含来自您的 password
前端
const newUser = new User({
...user,
admin: false,
password: hashedPassword,
sub_admin: true
});
这导致 newUser
有 2 个密码字段,要在散列后删除旧密码,请执行此操作
// hash the password => 3
const hashedPassword = await bcrypt.hash(user.password, 10);
delete user.password
const newUser = new User({
...user,
admin: false,
password: hashedPassword,
sub_admin: true
});
这样你就可以设置新的Hashed
密码了。
因为你的错误很一般,几乎不可能调试它,这些是我发现的几件很奇怪的事情。
正如我所说,不确定它是否会修复您的错误,但它可能会让您关闭
这是我在后端的代码(ExpressJs,multer)
注意:我在 server.js 文件中使用了 cors 并且它在之前的路由中按我预期的方式工作,但是在这个 Register Admin 路由中,出现了另一个错误
const multer = require('multer');
const upload = multer({ dest: './public/uploads/' });
const User = require('../models/user.model'); // User model
router.post('/admin/register', upload.single('avatar'),
async (req, res) => {
const avatar = req.file.path.slice(7);
const user = {
...JSON.parse(req.body.user),
avatar
};
// hapi/joi validate => 1
const { error } = Validation.adminRegisterValidation(user);
if (error) {
return res.json({ error: error.details[0].message });
}
// validate from database => 2
const emailExist = await User.findOne({ email: user.email });
if (emailExist) {
return res.json({ error: 'Email already exist!' });
}
// hash the password => 3
const hashedPassword = await bcrypt.hash(user.password, 10);
const newUser = new User({
...user,
admin: false,
password: hashedPassword,
sub_admin: true
});
try {
await newUser.save();
return res.json("Add user success!");
} catch (err) {
return res.json({ error: err });
}
}
);
If i turn 1,2,3 to comment, the user is added as I expected
这个项目在我的GithubGithub
- 文件中的前端:src -> 组件 -> 仪表板 -> 用户仪表板 -> CreateUser.js
- 文件中的后端:后端 -> 路由 -> user.route.js
这是我的错误图片
好吧,我发现了两个可能导致您的问题的错误,不确定它是否能完全解决您的问题,但肯定会让您满意。
1) 从 user schema
Max
长度 属性
现在您 max
的密码长度为 30 user Schema
,但是一旦您对密码进行哈希处理,哈希后的密码可以超过 30 个字符。
你可以点击here看看我在说什么
2) 您需要删除 old password
才能存储新的 hashed password
在这行代码中,您使用 Spread Syntax 来包含来自 user
对象的 NewUser
对象中的所有字段,该对象已经包含来自您的 password
前端
const newUser = new User({
...user,
admin: false,
password: hashedPassword,
sub_admin: true
});
这导致 newUser
有 2 个密码字段,要在散列后删除旧密码,请执行此操作
// hash the password => 3
const hashedPassword = await bcrypt.hash(user.password, 10);
delete user.password
const newUser = new User({
...user,
admin: false,
password: hashedPassword,
sub_admin: true
});
这样你就可以设置新的Hashed
密码了。
因为你的错误很一般,几乎不可能调试它,这些是我发现的几件很奇怪的事情。
正如我所说,不确定它是否会修复您的错误,但它可能会让您关闭