Node.js 异步等待出错(至少在我看来)-ExpressJS、MongoDB、NodeJS、multer 这是我在后端的代码(ExpressJs、multer)
注意:我在server.js文件中使用了cors,它的工作方式与我在上一个路由中预期的一样,但是在这个Register Admin路由中,出现了另一个错误Node.js 异步等待出错(至少在我看来)-ExpressJS、MongoDB、NodeJS、multer 这是我在后端的代码(ExpressJs、multer),node.js,mongodb,express,multer,Node.js,Mongodb,Express,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/re
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 });
}
}
);
如果我使用1,2,3进行评论,用户将按我的预期添加
我的Github中的此项目
-文件中的前端:src->components->dashboard->user dashboard->CreateUser.js
-文件中的后端:后端->路由->user.route.js
这是我的错误图像我发现了两个可能导致您的问题的错误,不确定它是否能完全解决您的问题,但肯定会让您接近 1) 从用户架构中删除
Max
length属性
现在,您的用户模式中密码的最大长度为30个
,但一旦对密码进行散列,散列后的密码可以超过30个字符
你可以点击看看我在说什么
2) 您需要删除旧密码
,以便存储新的散列密码
在这一行代码中,您用来包括来自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
});
通过这种方式,您可以将密码设置为newHashed
one
由于您的错误非常普遍,几乎不可能对其进行调试,因此我发现以下几点非常奇怪
正如我所说,我不确定它是否会修复您的错误,但它可能会让您接近您会遇到什么错误?我添加了错误图像!服务器抛出的错误是什么?服务器不抛出错误,当我出现上述错误时,服务器正在重新启动:(如果必要,我可以查看teamview确定,我只发现bcrypt哈希密码周围有一个错误,如果我删除与bcrypt相关的内容,我的程序将按我预期的方式运行,我的错误已修复。错误发生是因为您提到的第一个错误