因此,我试图测试我的节点服务器是否可以处理重复数据插入到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...
我看到一个类似的帖子,说他发送了两个回复,但我没有看到我的情况
3条答案
按热度按时间cyej8jka1#
我想你没有用
await user.create
。在完成数据库插入操作之前,您将返回响应,稍后数据库将抛出错误。
7kjnsjlb2#
解决方案是在处理程序中添加一个检查,如下所示:
还要注意,一旦你添加了用户,你只是
console.log()
了数据,而不发送任何响应,这只会在你的客户端引发超时。xj3cbfub3#
只要返回一个statuscode和一个消息后,检查用户是否已经存在。这将确保该过程不会向前移动,并且不会尝试使用这些现有的详细信息创建新用户,如下所示:if(existingUser)return res.send(“用户已存在”);