我们可以在Node JS中使用单个PUT请求更新多个记录吗?

时间:2018-12-19 15:52:36

标签: node.js angular http service

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

假设这是我在Angular上的代码,该代码通过如下的放置请求来更新一本书:

updateBook(updatedBook:Book):可观察{     返回this.http.put(/api/books/${updatedBook.bookID},updatedBook,{       标头:新的HttpHeaders({         '内容类型':'应用程序/ json'       })     });   }

在Node js前端,它可以从client(Angular)端读取传递的书本对象,如下所示:

.put(function(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 []):可观察{     返回this.http.put(/api/books,updatedBooks,{       标头:新的HttpHeaders({         '内容类型':'应用程序/ json'       })     });   }

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

2 个答案:

答案 0 :(得分:0)

是的,因为我们使用PUT方法传递数据。您可以将要更新的数据作为对象数组发送。如果您将MongoDB用作数据库,则可以使用Update Array Operator更新数据。

我的建议 问题是,前端没有什么可做的。如果只需要更新单个记录,则将单个数据作为对象传递到数组中。如果要更新多个记录,请将每个记录作为数组内的一个对象传递给后端。

在后端,我们可以使用req.body.books(您从前端传递的对象的名称)接收数据。如果您使用的是mongoDB,则可以参考有关如何在数组中存储数据的链接。

答案 1 :(得分:0)

我也是 node js 的新手,但我尝试通过邮递员更新多个值,我点击了 '/api/books' ,下面的代码对我有用,并使用 PUT call 一次更新了我的数据库中的所有值。使用 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)
                    }
                }
            })
        })
     }
       
   })