簡體   English   中英

(平均堆棧)當我使用 put 方法更新文檔時沒有任何反應

[英](MEAN STACK) nothing happens when i use put method to update a document

我有一個應該做 CRUD 的應用程序,非常簡單。 我想更新一本書的信息,但它不起作用所以我應該改變什么? 另外我現在收到此錯誤:

core.js:6210 錯誤類型錯誤:無法讀取未定義的屬性(讀取“值”)

后端代碼:

//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) ;
  }

編輯組件.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(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');
                }
            })
  })

最后我在閱讀文檔后找到了解決方案。 我的代碼中有兩個明顯的錯誤,第一個是我沒有將用於過濾更新請求的輸入字段分配給 [(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');
                }
            })
  })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM