Я пытаюсь вызвать функцию "cryptPassword" из модуля "passport" и использовать её в хуке для модели "Users" (я использую sequelize).
Экспорт функции "cryptPassword"
module.exports = {
cryptPassword(password) {
return new Promise( (resolve, reject) => {
bcrypt.genSalt(10, (err, salt) => {
if (err) return reject(err);
bcrypt.hash(password, salt, null, (err, hash) => {
if (err) return reject(err);
return resolve(hash);
});
});
});
}
};
Использование функции "cryptPassword"
const cryptPassword = require('../config/passport').cryptPassword;
...
User.beforeCreate( (user, options) => {
return cryptPassword(user.password)
.then(success => user.password = success)
.catch(err => if (err) console.log(err));
});
Суть проблемы
Раньше это работало, но сегодня NodeJS выдаёт вот такую ошибку:
TypeError: cryptPassword is not a function
at Function.User.beforeCreate (D:\iT\code\Web\projects\wcc-api\server\models\user.js:67:12)
at Promise.each.hook (D:\iT\code\Web\projects\wcc-api\node_modules\sequelize\lib\hooks.js:130:35)
at tryCatcher (D:\iT\code\Web\projects\wcc-api\node_modules\bluebird\js\release\util.js:16:23)
at Object.gotValue (D:\iT\code\Web\projects\wcc-api\node_modules\bluebird\js\release\reduce.js:155:18)
at Object.gotAccum (D:\iT\code\Web\projects\wcc-api\node_modules\bluebird\js\release\reduce.js:144:25)
at Object.tryCatcher (D:\iT\code\Web\projects\wcc-api\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (D:\iT\code\Web\projects\wcc-api\node_modules\bluebird\js\release\promise.js:512:31)
at Promise._settlePromise (D:\iT\code\Web\projects\wcc-api\node_modules\bluebird\js\release\promise.js:569:18)
at Promise._settlePromiseCtx (D:\iT\code\Web\projects\wcc-api\node_modules\bluebird\js\release\promise.js:606:10)
at Async._drainQueue (D:\iT\code\Web\projects\wcc-api\node_modules\bluebird\js\release\async.js:138:12)
at Async._drainQueues (D:\iT\code\Web\projects\wcc-api\node_modules\bluebird\js\release\async.js:143:10)
at Immediate.Async.drainQueues (D:\iT\code\Web\projects\wcc-api\node_modules\bluebird\js\release\async.js:17:14)
at runCallback (timers.js:789:20)
at tryOnImmediate (timers.js:751:5)
at processImmediate [as _immediateCallback] (timers.js:722:5)enter code here
Моя попытка решить проблему
Если испорт функции "cryptPassword" перенести в хук "beforeCreate" прямо перед "return", то всё работает как и должно. Но это какой-то костыль. Как исправить это ?. Заранее спасибо :)
Вот так попробуйте Экспорт функции "cryptPassword"
module.exports.cryptPassword = (password)=> {
return new Promise( (resolve, reject) => {
bcrypt.genSalt(10, (err, salt) => {
if (err) return reject(err);
bcrypt.hash(password, salt, null, (err, hash) => {
if (err) return reject(err);
return resolve(hash);
});
});
});
};
Или же если вы хотите импортировать как обет то сделайте правку в строке
cryptPassword(password) {
должно быть
cryptPassword: function(password) {
или более современный вариант данной строки
cryptPassword:(password)=> {
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Делаю одностраничное приложениеНа странице есть несколько форм, каждая из которых позволяет добавлять информацию в БД
Подскажите, у меня вот такой HTML (CSS потом вынесу):
Допустим, у нас есть форма, и в ней есть текстовое поле с вводом пароля:
Есть хостинг, планируется туда загружать сайты для заказчиков на вордпресс(те