Вопрос:

Ошибка: требуются аргументы данных и соли (Async)

node.js mongoose bcrypt

905 просмотра

1 ответ

38 Репутация автора

У меня проблема с Schema.pre ('save'), в моей модели 'user' не может получить 'this' для хеширования моего пароля с помощью bcrypt.

мой app.js, простое подключение в mongodb с помощью mongoose

mongoose.connect('mongodb://localhost/gederson', {
  useMongoClient: true,

});

const db = mongoose.connection;

db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', () => {
  console.log('Connected on mongo');
});

app.listen(process.env.PORT || 3000, () => {
  console.log('listening');
});

index(app, db);
post(app, db);
admin(app, db);


module.exports = app;

мой маршрут, я создал маршрут для создания пользователя в моем приложении, но в pre 'save' не может получить 'this' для хеш-пароля.

const Users = db.model('Users');

const newUser = {
          username: req.body.username,
          email: req.body.email,
          password: req.body.password,
        };
        Users.create(newUser, (err) => {
          if (err) throw err;
          res.status = 201;
          return res.send('User created');
        });

моя модель пользователя, код предварительно "сохранить"

const bcrypt = require('bcrypt');

UserSchema.pre('save', (next) => {
  const user = this;
  bcrypt.hash(user.password, 10, (err, hash) => {
    if (err) {
      return next(err);
    }
    user.password = hash;
    return next();
  });
});

const Users = mongoose.model('Users', UserSchema);

module.exports = Users;

Ошибка стека:

events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: data and salt arguments required
    at /home/gedersonchiquesi/ProjetosDev/wos/node_modules/bcrypt/bcrypt.js:114:16
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)
[nodemon] app crashed - waiting for file changes before starting...
Автор: Gederson Chiquesi Источник Размещён: 14.01.2018 03:04

Ответы (1)


0 плюса

1 Репутация автора

Я столкнулся с подобной проблемой сегодня.

Я решил этот вопрос, удалив синтаксис ES6 (функция стрелки).

UserSchema.pre('save', function(next) {
  const user = this;
  bcrypt.hash(user.password, 10, function(err, hash) {
     if (err) {
     return next(err);
     }
     user.password = hash;
     next();
  })
});
Автор: Ezell Frazier Размещён: 16.01.2018 10:09
Вопросы из категории :
32x32