从Express中的单个POST调用中调用多个DELETE调用?

时间:2018-03-30 08:30:21

标签: express json-server

我在项目中使用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应该有办法处理这个问题吗?

1 个答案:

答案 0 :(得分: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,那么这也可能会在服务器上请求导致其中大部分超时