NodeJs:使用Express比较URL参数和删除请求与数组值

所以,我有这些快递路线的对象数组,并做了一些CRUD操作,但我卡在“删除”之一。

我想通过抓取它的url参数ID来删除一个对象,并检查它是否与它的键的值匹配。 一切似乎工作,除了两件事情:

  • “文本”键可以是任何东西(不关心,如果它不在数组中)。
  • 只要匹配现有的url,它就不需要匹配它自己的“文本”。

我知道我错过了一些参数,但经过一段时间的search,尝试了几个不同的东西,我似乎无法把它放在手指上。 我是编程新手,可能说得不好,但请耐心等待。

app.js

var foodList = [ { id:'e3ed4we23', text:'honey' }, { id:'12312oi3i2', text:'milk' }, { id:'1023u2kodw', text:'chicken' }, { id:'213021381203', text:'eggs' } ]; app.delete('/food-list/delete/:ingredientId', function(req, res) { var removeIngredient = req.body.text; if(!removeIngredient || removeIngredient.length == 0) { console.log('Cannot remove this ingredient:', removeIngredient); res.status(500).send({error:'Cannot remove invalid ingredient text'}); }else { var idFound = false; for(var index = 0; index < foodList.length; index++) { var foundIngredient = foodList[index]; if(foundIngredient.id == req.params.ingredientId) { console.log('Removed ingredient: ', foundIngredient.text); foundIngredient.text = removeIngredient; foodList.splice(index, 1); idFound = true; break; } } if(!idFound) { res.status(500).send({error:'The ID you selected is invalid, please try again'}); }else { res.status(200).send(foodList); } } }); 

如果你想删除基于textused_id的对象,那么你需要使用这个:

 for(var index = 0; index < foodList.length; index++) { var foundIngredient = foodList[index]; if(foundIngredient.id == req.params.ingredientId && foundIngredient.text == removeIngredient ) { console.log('Removed ingredient: ', foundIngredient.text); foodList.splice(index, 1); idFound = true; break; } } 

我很困惑,为什么你一直在打扰请求的身体。 所有你需要删除的项目是它的ID,你在URL参数中。 我也不清楚你所看到的错误是什么。 从一瞥,我认为你的代码将运行良好,虽然它有点过于复杂。

你可以写这样的路线:

 app.delete('/food-list/delete/:ingredientId', function(req, res) { var removedIndex = foodList.findIndex(function(ingredient) { return ingredient.id === req.params.ingredientId; }) if (removedIndex === -1) { res.status(500).send({error:'The ID you selected is invalid, please try again'}); } else { foodList.splice(removedIndex, 1); console.log('Removed ingredient:', foodList[removedIndex].text); res.status(200).send(foodList); } });