【发布时间】:2022-01-05 09:44:16
【问题描述】:
所以我试图测试我的节点服务器是否可以处理向 mongodb 插入重复数据,但显然它不能。
代码如下:
app.post('/register', async (req, res) => {
const { email, password, firstName, lastName} = req.body
console.log(lastName)
console.log(typeof(lastName))
pword = await bcrypt.hash(password, 10)
try {
const response = user.create({
email: email,
password: pword,
firstName: firstName,
lastName: lastName
})
console.log("User created successfully: " + response)
} catch (error) {
return res.json({ status: 'error'})
}
})
这是错误:
MongoServerError: E11000 duplicate key error collection: ApartmentDB.UserData index: email_1 dup key: { email: "asdasa" }
at C:\Users\Hans\Desktop\MobDev Final Project\node_modules\mongodb\lib\operations\insert.js:51:33
at C:\Users\Hans\Desktop\MobDev Final Project\node_modules\mongodb\lib\cmap\connection_pool.js:272:25
at handleOperationResult (C:\Users\Hans\Desktop\MobDev Final Project\node_modules\mongodb\lib\sdam\server.js:370:9)
at MessageStream.messageHandler (C:\Users\Hans\Desktop\MobDev Final Project\node_modules\mongodb\lib\cmap\connection.js:479:9)
at MessageStream.emit (node:events:390:28)
at processIncomingData (C:\Users\Hans\Desktop\MobDev Final Project\node_modules\mongodb\lib\cmap\message_stream.js:108:16)
at MessageStream._write (C:\Users\Hans\Desktop\MobDev Final Project\node_modules\mongodb\lib\cmap\message_stream.js:28:9)
at writeOrBuffer (node:internal/streams/writable:389:12)
at _write (node:internal/streams/writable:330:10)
at MessageStream.Writable.write (node:internal/streams/writable:334:10) {
index: 0,
code: 11000,
keyPattern: { email: 1 },
keyValue: { email: 'asdasa' }
}
[nodemon] app crashed - waiting for file changes before starting...
我看到一个与我类似的帖子,说他发送了两个回复,但在我的情况下我看不到这一点
【问题讨论】:
-
如果没有看到您的用户模型的代码,我们无法判断这一点。虽然,一般来说,错误表明您尝试创建用户的电子邮件已经存在于您的集合中,这不是错误,但实际上,用户数据库中不能有 2 个用户使用相同的电子邮件。
-
@hackKaTun3s 是的,它已经存在,但问题是节点服务器在存在重复条目时崩溃。显然,每次用户重复输入时都无法重新启动服务器。
-
Model.create 是异步的,分配给变量时应该等待吗?
-
@Joe 你说得对...
-
是否有 await 进入 try catch 块?并且由于 res 已经发送,try catch 关闭并且错误使应用程序崩溃?
标签: javascript mongodb