我正在尝试使用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会包含传递的此数组吗?
答案 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)
}
}
})
})
}
})