Это код моего маршрутизатора:
router.post('/users/register',async (req,res) => {
console.log(req.body);
const user = new User(req.body);
try{
await user.save(function(err){
if (err) {
console.log(err);
}
});
const token = await user.generateAuthToken();
res.redirect('/');
}catch(e){
console.log(e);
res.status(400).send(e);
}
});
Сгенерировать код токена:
userSchema.methods.generateAuthToken = async function() {
const user = this;
const token = jwt.sign({ _id : user._id.toString() },process.env.JWT_SECRET_CODE);
user.tokens = user.tokens.concat({token});
await user.save();
return token;
}
код сохранения пользователя:
userSchema.pre('save', async function (next){
const user = this;
if(user.isModified('password')){
user.password = await bcrypt.hash(user.password,8);
}
next();
});
Ошибка:
ParallelSaveError: Can't save() the same doc multiple times in parallel. Document: 61109ecdc48220245c0ecaf7
at model.Model.save
at model.userSchema.methods.generateAuthToken
MongooseError: Operation `users.insertOne()` buffering timed out after 10000ms
at Timeout.<anonymous>
Это данные, которые я отправляю в базу данных монго:
{
name: 'sdhfie',
username: 'eifh_2397',
email: 'example@gmail.com',
phone: '+918329389241',
password: 'sdfieu@92734',
'repeat-password': 'sdfieu@92734'
}
Я украл данные, и данные отправляются, но пользователь не сохраняется.
Я перепробовал большинство решений, доступных на coderhelper, но в моем случае ничего не помогло. Пожалуйста, попробуйте мне помочь.
Вы неправильно используете async/await. Вы используете как функцию обратного вызова, так и асинхронную. Выберите один или другой.
@AlexanderStaroselsky, не могли бы вы уточнить подробнее.
Готово, я понял. Большое спасибо!
В частности,
await user.save(function(err){
. Вы выполняете await впереди, что вы бы сделали без передачи функции обратного вызова. Эффективно удалите функцию из save(), если хотите использовать await.