为什么 MongoDB 在表单中的 ng-click 上给出 E11000 重复键错误
Why Does MongoDB give a E11000 duplicate key error on ng-click in a form
在使用 MEAN 堆栈时,我 运行 在尝试通过 PUT 方法更新我的数据时遇到了一些问题。
我有一个非常简单的Angular表格:
<form ng-submit="vm.createQuote()">
<label>Author</label>
<input type="text" ng-model="vm.quote.author">
<label>Text</label>
<textarea cols="30" rows="4" ng-model="vm.quote.text"></textarea>
<button type="submit">CREATE</button>
<button ng-click="vm.updateQuote()">UPDATE</button>
</form>
我有一个使用 Express 和 Mongoose 的节点应用程序 (MongoDB)。我已经使用 POSTMAN 测试了 REST Api。后端一切正常。
当我尝试使用表单更新按钮更新某个报价(触发 $http.put)时,我收到 MongoDB 错误:
MongoError: E11000 duplicate key error index: mydb.quotes.$_id_ dup key: { : ObjectId('55acecfcee620c7a04e9641c') }
虽然我收到此错误,但我的数据已在数据库中正确更新。问题必须来自 Angular,因为使用 POSTMAN,我所有的 HTTP 请求都没有错误地完成。我检查了我的两个请求(通过 Postman 和 Angular)是否具有相同的 headers 和 body.
知道为什么我的请求在 POSTMAN 中有效,而在我的 Angular 应用中无效吗?
通过 ngSubmit documentation I noticed that I was using ngClick AND ngSubmit in my form. This is a bad thing as explained in the angular form documentation.
显然,当我触发更新时,PUT 请求正确发生(这就是我的数据正确更新的原因)。但是因为我正在使用 ngSubmit 和 ngClick,所以表单元素本身也在执行 POST 请求,这会导致 MongoDB 错误。
抛出 MongoDB 错误的原因是因为 POST 请求正在使用 PUT 请求的响应主体作为它自己的主体。
这会导致重复键错误,因为正文中的对象具有数据库中已存在的 ID。
固定格式:
<form>
<label>Author</label>
<input type="text" ng-model="vm.quote.author">
<label>Text</label>
<textarea cols="30" rows="4" ng-model="vm.quote.text"></textarea>
<button ng-click="vm.createQuote()">CREATE</button>
<button ng-click="vm.updateQuote()">UPDATE</button>
</form>
在使用 MEAN 堆栈时,我 运行 在尝试通过 PUT 方法更新我的数据时遇到了一些问题。
我有一个非常简单的Angular表格:
<form ng-submit="vm.createQuote()">
<label>Author</label>
<input type="text" ng-model="vm.quote.author">
<label>Text</label>
<textarea cols="30" rows="4" ng-model="vm.quote.text"></textarea>
<button type="submit">CREATE</button>
<button ng-click="vm.updateQuote()">UPDATE</button>
</form>
我有一个使用 Express 和 Mongoose 的节点应用程序 (MongoDB)。我已经使用 POSTMAN 测试了 REST Api。后端一切正常。
当我尝试使用表单更新按钮更新某个报价(触发 $http.put)时,我收到 MongoDB 错误:
MongoError: E11000 duplicate key error index: mydb.quotes.$_id_ dup key: { : ObjectId('55acecfcee620c7a04e9641c') }
虽然我收到此错误,但我的数据已在数据库中正确更新。问题必须来自 Angular,因为使用 POSTMAN,我所有的 HTTP 请求都没有错误地完成。我检查了我的两个请求(通过 Postman 和 Angular)是否具有相同的 headers 和 body.
知道为什么我的请求在 POSTMAN 中有效,而在我的 Angular 应用中无效吗?
通过 ngSubmit documentation I noticed that I was using ngClick AND ngSubmit in my form. This is a bad thing as explained in the angular form documentation.
显然,当我触发更新时,PUT 请求正确发生(这就是我的数据正确更新的原因)。但是因为我正在使用 ngSubmit 和 ngClick,所以表单元素本身也在执行 POST 请求,这会导致 MongoDB 错误。
抛出 MongoDB 错误的原因是因为 POST 请求正在使用 PUT 请求的响应主体作为它自己的主体。 这会导致重复键错误,因为正文中的对象具有数据库中已存在的 ID。
固定格式:
<form>
<label>Author</label>
<input type="text" ng-model="vm.quote.author">
<label>Text</label>
<textarea cols="30" rows="4" ng-model="vm.quote.text"></textarea>
<button ng-click="vm.createQuote()">CREATE</button>
<button ng-click="vm.updateQuote()">UPDATE</button>
</form>