(MEAN STACK) 当我使用 put 方法更新文档时没有任何反应
(MEAN STACK) nothing happens when i use put method to update a document
我有一个应该执行 CRUD 的应用程序,非常简单。我想更新一本书的信息,但它不起作用,所以我应该更改什么?
另外我现在收到这个错误:
core.js:6210 错误类型错误:无法读取未定义的属性(读取 'value')
后端代码:
//EDIT ONE BOOK BY NAME
booksRoute.route('/edit/:name').put((req,res,next)=>{
BookModel.findOneAndUpdate(req.params.name,
{$set:false},
(error,data)=>{
if (error){
console.log(error);
return next(error);
}else{
res.json(data) ;
console.log('data updated successfully');
}
})
})
前端代码:
<div id="bg"><div class="addme">
<ul>
<form #f="ngForm" (ngSubmit)="onSubmit(f)" ngNativeValidate>
<li>
<label>book's name *</label>
<input name="name" type="text" required>
</li>
<li>
<label>book's genre *</label>
<input name="genre" type="text" ngModel required>
</li>
<li>
<label>book's author *</label>
<input name="author" type="text" ngModel required>
</li>
<li>
<label>rating *</label>
<input name="rating" type="number" [max]="10" min="0" ngModel required>
</li>
<li>
<label>price *</label>
<input name="price" type="number" ngModel required>
<input class="btn btn-primary" type="submit"/>
</li>
</form>
</ul>
</div>
</div>
服务
//edit one book by it's name
editBook(name:string, data){
return this.http.put(this.backendUrl +'/edit/'+name,data) ;
}
编辑-component.ts
onSubmit(f){
console.log("name value:" + f.name.value)
this.apiService.editBook(f.name.value,f.value).subscribe( res => {console.log('backend\' response:',res)}) ;
}
所以问题是您没有指定要更新的字段,请执行以下操作:
booksRoute.route('/edit/:name').put((req,res,next)=>{
BookModel.findOneAndUpdate({ name: req.params.name },
{$set: {
fieldname: false
}},
(error,data)=>{
if (error){
console.log(error);
return next(error);
}else{
res.json(data) ;
console.log('data updated successfully');
}
})
})
编辑:我已经更新了代码确实有一个错误我没有通过过滤器纠正我已经改变了所以现在它应该可以工作了。
此外,如果您想了解更多信息,请访问此 site
阅读文档后,我终于找到了解决方案。
我的代码中有两个明显的错误,第一个是我没有将要用来过滤更新请求的输入字段分配给 [(ngModel)] ('name')。
所以在我的模板中是这样的:
<li>
<label>book's name *</label>
<input name="name" type="text" [(ngModel)]="f.name" required>
</li>
下一个错误是 findOneAndUpdate 方法缺少请求正文,所以它应该像这样工作:
//EDIT ONE BOOK BY NAME
booksRoute.route('/edit/:name').put((req,res,next)=>{
BookModel.findOneAndUpdate(req.params.name,req.body,
{new:true},
(error,data)=>{
if (error){
console.log(error);
return next(error);
}else{
console.log(data)
res.json(data) ;
console.log('data updated successfully');
}
})
})
我有一个应该执行 CRUD 的应用程序,非常简单。我想更新一本书的信息,但它不起作用,所以我应该更改什么? 另外我现在收到这个错误:
core.js:6210 错误类型错误:无法读取未定义的属性(读取 'value')
后端代码:
//EDIT ONE BOOK BY NAME
booksRoute.route('/edit/:name').put((req,res,next)=>{
BookModel.findOneAndUpdate(req.params.name,
{$set:false},
(error,data)=>{
if (error){
console.log(error);
return next(error);
}else{
res.json(data) ;
console.log('data updated successfully');
}
})
})
前端代码:
<div id="bg"><div class="addme">
<ul>
<form #f="ngForm" (ngSubmit)="onSubmit(f)" ngNativeValidate>
<li>
<label>book's name *</label>
<input name="name" type="text" required>
</li>
<li>
<label>book's genre *</label>
<input name="genre" type="text" ngModel required>
</li>
<li>
<label>book's author *</label>
<input name="author" type="text" ngModel required>
</li>
<li>
<label>rating *</label>
<input name="rating" type="number" [max]="10" min="0" ngModel required>
</li>
<li>
<label>price *</label>
<input name="price" type="number" ngModel required>
<input class="btn btn-primary" type="submit"/>
</li>
</form>
</ul>
</div>
</div>
服务
//edit one book by it's name
editBook(name:string, data){
return this.http.put(this.backendUrl +'/edit/'+name,data) ;
}
编辑-component.ts
onSubmit(f){
console.log("name value:" + f.name.value)
this.apiService.editBook(f.name.value,f.value).subscribe( res => {console.log('backend\' response:',res)}) ;
}
所以问题是您没有指定要更新的字段,请执行以下操作:
booksRoute.route('/edit/:name').put((req,res,next)=>{
BookModel.findOneAndUpdate({ name: req.params.name },
{$set: {
fieldname: false
}},
(error,data)=>{
if (error){
console.log(error);
return next(error);
}else{
res.json(data) ;
console.log('data updated successfully');
}
})
})
编辑:我已经更新了代码确实有一个错误我没有通过过滤器纠正我已经改变了所以现在它应该可以工作了。
此外,如果您想了解更多信息,请访问此 site
阅读文档后,我终于找到了解决方案。 我的代码中有两个明显的错误,第一个是我没有将要用来过滤更新请求的输入字段分配给 [(ngModel)] ('name')。 所以在我的模板中是这样的:
<li>
<label>book's name *</label>
<input name="name" type="text" [(ngModel)]="f.name" required>
</li>
下一个错误是 findOneAndUpdate 方法缺少请求正文,所以它应该像这样工作:
//EDIT ONE BOOK BY NAME
booksRoute.route('/edit/:name').put((req,res,next)=>{
BookModel.findOneAndUpdate(req.params.name,req.body,
{new:true},
(error,data)=>{
if (error){
console.log(error);
return next(error);
}else{
console.log(data)
res.json(data) ;
console.log('data updated successfully');
}
})
})