首页 > 解决方案 > 我们可以在 Node JS 中使用单个 PUT 请求更新多条记录吗?

问题描述

我正在尝试使用 Angular HTTP 服务通过单个 put 请求更新多条记录,该服务又使用处理 PUT 请求的 Node JS Express API。但到目前为止,我在互联网上看到的示例指的是通过 put 请求更新单个记录。但相反,我想将一组对象传递给来自 Angular Http 服务的 Put 请求,它应该能够在 Node JS API 中读取该集合。到目前为止,我一直在传递一个对象作为请求的一部分,我可以通过“req.body.propertyname”读取它的属性。它可以读取我想要传递的整个数组吗?

假设这是我在 Angular 端通过 put 请求更新一本书的代码,如下所示:

updateBook(updatedBook: Book): Observable { return this.http.put( /api/books/${updatedBook.bookID}, updatedBook, { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) }); }

在 Node js 前端,它能够从客户端(Angular)端读取传递的 book 对象,如下所示:

.put(函数(req, res) {

    var data = getBookData();

    var matchingBooks = data.filter(function(item) {
        return item.bookID == req.params.id;
    });

    if(matchingBooks.length === 0) {
        res.sendStatus(404);
    } else {

        var bookToUpdate = matchingBooks[0];
        bookToUpdate.title = req.body.title;
        bookToUpdate.author = req.body.author;
        bookToUpdate.publicationYear = req.body.publicationYear;

        saveBookData(data);
        res.sendStatus(204);

    }
});

我的问题是我是否可以一次通过书籍集合,以便通过一个请求来更新所有书籍?

updateBook(updatedBooks: Book[]): Observable { return this.http.put( /api/books, updatedBooks, { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) }); }

如果是,那么 Node JS 甚至如何读取从客户端传递的这个数组。req.body 会包含这个数组吗?

标签: node.jsangularhttpservice

解决方案


我也是节点 js 的新手,但我尝试通过邮递员更新多个值,然后我点击了“/api/books”,下面的代码对我有用,并使用 PUT 调用一次更新了我的数据库中的所有值。使用 Mongo DB 和 Node JS

app.put('/api/books',(req,res)=>{
    var updatedData="";
    var headersAgain=false;
    for(let i =0;i<req.body.length;i++){
        DataBaseName.findByIdAndUpdate(req.body[i]._id)
        .then(val=>{
            val.url=req.body[i].title
            val.position=req.body[i].author
            val.auto_scroll=req.body[i].publicationYear
            updatedData=val+updatedData
             
            val.save((err,updatedObject)=>{
                console.log('inside save.....',updatedData)
                if(err){
                    return res.status(500).send(err)
                }else{
                    if(!headersAgain==true){
                        headersAgain=true
                        return res.status(201).send(updatedData)
                    }
                }
            })
        })
     }
       
   })

推荐阅读