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密码了。

因为你的错误很一般,几乎不可能调试它,这些是我发现的几件很奇怪的事情。

正如我所说,不确定它是否会修复您的错误,但它可能会让您关闭