从快递中的单个 POST 调用中调用多个 DELETE 调用?
Posted
技术标签:
【中文标题】从快递中的单个 POST 调用中调用多个 DELETE 调用?【英文标题】:Call multiple DELETE calls from a single POST call in express? 【发布时间】:2018-09-09 07:05:42 【问题描述】:我在一个项目中使用 json-server(基于 express)和 gulp-json-srv。我有以下“customRoute”:
'/deletefavorites':
method: 'POST',
handler: function(req, res, next)
req.method = 'DELETE';
var arr = req.body;
for (var i = 0; i < arr.length; i++)
req.url = '/favorites/' + arr[i];
res.redirect(req.url);
数组 req.body 只保存“收藏夹”的 id。所以 req.body 看起来像这样:
[
"id": "123",
"id":"124",
...
]
问题是重定向只重定向这个请求一次然后出错。这意味着我只能删除一条记录,而且它也不处理“方法”,因为我只能在重定向中发送 URL。
我想要的是这样的:
for (var i = 0; i < arr.length; i++)
req.url = '/favorites/' + arr[i];
app.handle(req, res, next);
next();
使用新参数。这样的事情可能吗?我搜索了许多相关的堆栈溢出问题,但我找到的唯一解决方案是在其中使用 xhr 请求,但我认为 express 应该有办法处理这个问题?
【问题讨论】:
为什么要通过 URL 发生这种情况?如果不是服务间调用,这种方法是错误的。如果您在同一个服务中,那么您应该有一个可重用的删除逻辑,该逻辑可以在所有 id 上逐个调用,或者您应该有一个可以发送一组 id 并删除它们的逻辑。然后你应该直接在你的/deletefavorites
处理程序中调用
嘿@TarunLalwani,如果这是一个选项,我们当然会这样做。解释我们项目背后的架构需要 500 多个字符。基本上,我们的 javascript 逻辑与 AEM 项目的 javascript 逻辑共享。在那个 AEM 项目中,拥有多个 id 的单个 post call 比拥有 10 个单个 DELETE 调用更“漂亮”,这会大大增加服务器的负载。这就是为什么我们需要将 post 调用“翻译”为原型上的单个 delete 调用
请加入这个chat房间进行进一步讨论
【参考方案1】:
这是在服务内调用的示例方式
const express = require('express');
const app = express();
const request = require('request');
app.post('/deleteFavorites', (req, res) =>
req.body = [
"id": "123",
"id":"124",
]
console.log("deleteFavorites was called?")
request.delete(
url: "http://" + req.headers.host + "/favorites/delete",
body: req.body,
json: true
, function(error, response, body)
console.log(body, error, response);
res.status(200).send("all good");
);
);
app.delete('/favorites/delete', (req, res) =>
console.log("favorites/delete was called?")
res.status(200).send("all good");
);
app.listen(9090);
理想的方法是通过可重用的函数来实现,但由于您提到这不是一种选择,这是人们可以使用的另一种可能的方法。
但我建议将其限制为一次调用而不是多次调用,否则您可能会导致服务器上的请求爆炸。如果您在/deleteFavorites
的服务器上发送 100 个 id,那么这也会引发服务器上的请求,导致其中大多数超时
【讨论】:
以上是关于从快递中的单个 POST 调用中调用多个 DELETE 调用?的主要内容,如果未能解决你的问题,请参考以下文章
在 Node.js 中的单个 HTTP 请求中调用多个 HTTP 请求
单个 UIViewController 中的多个集合视图未调用 cellForItemAtIndexPath indexPath