javascript - 无法并行多次保存()同一个文档,并且操作“users.insertOne()”缓冲在 10000 毫秒后超时
问题描述
这是我的路由器代码:
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>
这是我发送到 mongo 数据库的数据:
{
name: 'sdhfie',
username: 'eifh_2397',
email: 'example@gmail.com',
phone: '+918329389241',
password: 'sdfieu@92734',
'repeat-password': 'sdfieu@92734'
}
我安慰了数据并发送了数据,但未保存用户。
我已经尝试了 stackoverflow 上可用的大多数解决方案,但在我的情况下没有任何效果。请尝试帮助我。
解决方案
您目前正在混合异步和回调。尝试更新 POST 处理程序以从 save() 中删除回调函数:
router.post('/users/register', async (req,res) => {
console.log(req.body);
const user = new User(req.body);
try {
await user.save();
const token = await user.generateAuthToken();
res.redirect('/');
} catch(e){
console.log(e);
res.status(400).send(e);
}
});
希望这会有所帮助!
推荐阅读
- javascript - Vue如何对表单数据进行分组
- javascript - 将网络摄像头视频渲染到画布时超出最大调用堆栈大小
- html - 基于当前页面的 HTML Wrapper 状态更新
- swift - 类型“String._CharacterView.Index”(又名“String.Index”)不符合协议“FixedWidthInteger”
- python - 【Django】在一个模型中编写所有表定义是不好的做法吗?
- python - ValueError:模型的特征数量必须与输入匹配。模型 n_features 为 356,输入 n_features 为 164
- regex - 如何在 Mushclient 中将任何房间描述与正则表达式匹配
- python - AttributeError:从 JSON 数据读取时,“元组”对象没有“读取”属性
- spring-amqp - 如何监听队列不同的虚拟主机?
- xslt - Solr 7.6 安装什么库和什么版本的 XSLT 以与响应编写器一起使用?