Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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
Javascript 猫鼬ODM:Can';由于异步,无法保存编码密码_Javascript_Node.js_Asynchronous_Mongoose - Fatal编程技术网

Javascript 猫鼬ODM:Can';由于异步,无法保存编码密码

Javascript 猫鼬ODM:Can';由于异步,无法保存编码密码,javascript,node.js,asynchronous,mongoose,Javascript,Node.js,Asynchronous,Mongoose,我的问题是,当文档已经持久化时,salt生成和密码编码已经准备就绪。=>mongoosejs不会等到散列完成,所以数据库中没有密码和密码(但我可以console.log:) 有什么可以避免这种行为吗 服务员的功能 或者我应该将编码部分移动到一些预保存中间件中 编码方法 UserSchema.methods.encodePassword = function(password) { crypto.randomBytes(32, function(err, buf) { th

我的问题是,当文档已经持久化时,salt生成和密码编码已经准备就绪。=>mongoosejs不会等到散列完成,所以数据库中没有密码和密码(但我可以console.log:)

有什么可以避免这种行为吗

  • 服务员的功能
  • 或者我应该将编码部分移动到一些预保存中间件中
  • 编码方法

    UserSchema.methods.encodePassword = function(password) {
        crypto.randomBytes(32, function(err, buf) {
            this.salt = buf.toString('hex');
            console.log(this.salt);
            crypto.pbkdf2(password, this.salt, 25000, 512, function(err, encodedPassword) {
                if (err) throw err;
                this.password = encodedPassword;
                console.log(this.password);
            }.bind(this));
        });
    };
    
    路线行动

    // creates a new user
    app.post('/users', function(req, res) {
        // create new user
        var user = new User();
        // assign post
        user.username = req.body.username;
        user.email = req.body.email;
        user.encodePassword(req.body.password);
        user.save(function(err, user) {
            console.log(user);
            if (!err) return res.send(err, 500);
            return res.json(user);
        });
    });
    

    您需要
    encodePassword
    进行回调,以便完成后可以调用它

    UserSchema.methods.encodePassword = function(password, callback) {
        crypto.randomBytes(32, function(err, buf) {
            this.salt = buf.toString('hex');
            console.log(this.salt);
            crypto.pbkdf2(password, this.salt, 25000, 512, function(err, encodedPassword) {
                if (err) return callback(err);
                this.password = encodedPassword;
                console.log(this.password);
                callback();
            }.bind(this));
        });
    };
    
    现在,您可以等待它在您的路线中完成

    app.post('/users', function(req, res) {
        // create new user
        var user = new User();
        // assign post
        user.username = req.body.username;
        user.email = req.body.email;
        user.encodePassword(req.body.password, function(err) {
            if(err) { /* handle error */ }
            user.save(function(err, user) {
                console.log(user);
                if (!err) return res.send(err, 500);
                return res.json(user);
            });
        });
    });
    

    您需要
    encodePassword
    进行回调,以便完成后可以调用它

    UserSchema.methods.encodePassword = function(password, callback) {
        crypto.randomBytes(32, function(err, buf) {
            this.salt = buf.toString('hex');
            console.log(this.salt);
            crypto.pbkdf2(password, this.salt, 25000, 512, function(err, encodedPassword) {
                if (err) return callback(err);
                this.password = encodedPassword;
                console.log(this.password);
                callback();
            }.bind(this));
        });
    };
    
    现在,您可以等待它在您的路线中完成

    app.post('/users', function(req, res) {
        // create new user
        var user = new User();
        // assign post
        user.username = req.body.username;
        user.email = req.body.email;
        user.encodePassword(req.body.password, function(err) {
            if(err) { /* handle error */ }
            user.save(function(err, user) {
                console.log(user);
                if (!err) return res.send(err, 500);
                return res.json(user);
            });
        });
    });
    

    嘿,出于某种原因,这仍然不起作用。我假设UserSchema.methods.encodePassword没有对模型的语义访问权限。我会检查这个我会问猫鼬谷歌集团。文档是一种极简主义的方式。我永远不知道何时以及如何通过setter、方法、插件访问模型属性,然而,由于某些原因,这仍然不起作用。我假设UserSchema.methods.encodePassword没有对模型的语义访问权限。我会检查这个我会问猫鼬谷歌集团。文档是一种极简主义的方式。然而,我永远不知道何时以及如何通过setter、方法和插件访问模型属性