首页 > 解决方案 > 在 expressjs 应用程序中,如何在 API 端点中处理带有 POST 请求的数组?

问题描述

我正在尝试构建 expressjs API 端点。对于我的应用程序目的,对象将来到另一台服务器,它是多个对象。我需要将它转换为一个数组,然后我需要将它推送到我的数据库或其他人。

另外我使用的是 express 4+,所以我没有使用 body-parser,因为它包含在 express 中。

###注意:数据来自另一台服务器,格式为“application/x-www-form-urlencoded”。

我希望数据会像这样的静态数据:

    [
        {
            "name": "As Md Habibullah",
            "phone": "+457578424",
            "email": "fhhgssa@yahoo.com",
            "car_brand": "Mercedes-Benz",
            "car_number": "256858"
        },
        {
            "name": "Filippo Masiero",
            "phone": "+hgfhfhfg",
            "email": "ghjhghjhg@yahoo.com",
            "car_brand": "Mercedes-Benz",
            "car_number": "25586458"
        },
        {
            "name": "Azad Ahmed",
            "phone": "+ghjggffg",
            "email": "jghjh@yahoo.com",
            "car_brand": "Mercedes-Benz",
            "car_number": "2566868"
        },
        {
            "name": "Md Musa",
            "phone": "+fgjhfgjfh",
            "email": "dfgyfyhfggh@yahoo.com",
            "car_brand": "Mercedes-Benz",
            "car_number": "256858"
        }
    ]

我假设数据将到达我的端点,它是多个对象,我需要像多个对象一样做一个数组:{}, {}, {}

我想做一个像这样的数组:[{}, {}, {}, {}]

可能吗?

标签: javascriptarraysapiexpressrest

解决方案


如果数据以 JSON 形式出现,但包含在application/x-www-form-urlencoded, 内容类型中,那么您将不得不为该内容类型使用 express 中间件。这将使您将 JSON 解码为纯文本,然后您必须手动将其解析为 Javascript 对象,如下所示:

// middleware for parsing application/x-www-form-urlencoded content-type 
app.use(express.urlencoded({extended: true}));

app.post("/somerouter", (res, res) => {
    try {
        // parse decoded body text from JSON into Javascript object
        let obj = JSON.parse(req.body);
        console.log(obj);
        // process obj here
        res.send("ok");
    } catch(e) {
       console.log("bad JSON", e);
       res.sendStatus(400);
    }
});

理想情况下,请求将被发送application/json,然后您可以使用express.json()中间件,JSON 将自动解析到您的对象中。


但是,如果您的application/x-www-form-urlencoded数据只是表单数据,那么它已经为您解析并且已经req.body作为该对象的属性存在。您只需直接访问它req.body

// middleware for parsing application/x-www-form-urlencoded content-type 
app.use(express.urlencoded({extended: true}));

app.post("/somerouter", (res, res) => {
    console.log(req.body);
    // process data in req.body and then send some response
    res.send("ok");
});

推荐阅读