Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 异步等待出错(至少在我看来)-ExpressJS、MongoDB、NodeJS、multer 这是我在后端的代码(ExpressJs、multer)_Node.js_Mongodb_Express_Multer - Fatal编程技术网

Node.js 异步等待出错(至少在我看来)-ExpressJS、MongoDB、NodeJS、multer 这是我在后端的代码(ExpressJs、multer)

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

注意:我在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 });
        }
    }
);
如果我使用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
    });
通过这种方式,您可以将密码设置为new
Hashed
one

由于您的错误非常普遍,几乎不可能对其进行调试,因此我发现以下几点非常奇怪


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

您会遇到什么错误?我添加了错误图像!服务器抛出的错误是什么?服务器不抛出错误,当我出现上述错误时,服务器正在重新启动:(如果必要,我可以查看teamview确定,我只发现bcrypt哈希密码周围有一个错误,如果我删除与bcrypt相关的内容,我的程序将按我预期的方式运行,我的错误已修复。错误发生是因为您提到的第一个错误