代码之家  ›  专栏  ›  技术社区  ›  Frederik Witte

在express中从一个POST通话中呼叫多个删除通话?

  •  0
  • Frederik Witte  · 技术社区  · 7 年前

    我在一个项目中使用json服务器(基于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);
            }
        }
    }
    

    阵列请求。body只保存“收藏夹”的ID。因此,请求。身体看起来像这样:

    {[
        "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 回复  |  直到 7 年前
        1
  •  1
  •   Tarun Lalwani    7 年前

    下面是在服务中调用的示例方法

    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);
    

    理想的方法是通过可重用的函数来实现,但由于您提到了这不是一个选项,因此这是可以使用的另一种可能的方法。

    但我建议将其限制为一个调用,而不是多个调用,否则可能会导致服务器上的请求爆炸。如果在中的服务器上发送100个ID /deleteFavorites 然后,可能会在服务器上引发太多请求,导致大多数请求超时