Express 不使用bodyparser访问post正文

Express 不使用bodyparser访问post正文,express,http,websocket,Express,Http,Websocket,我正在尝试将一个bas64编码的图像发送到我的express服务器,并在那里解析它以将其保存到磁盘。我想用一个简单的http post请求来实现这一点,但无法让它工作。我的第一个实现使用了websocket服务器,运行良好: 客户: const object = JSON.stringify({ action: "add_image", data: dataUrl, }) ws.send(object) const object = JSON.stringi

我正在尝试将一个bas64编码的图像发送到我的express服务器,并在那里解析它以将其保存到磁盘。我想用一个简单的http post请求来实现这一点,但无法让它工作。我的第一个实现使用了websocket服务器,运行良好:

客户:

const object = JSON.stringify({
    action: "add_image",
    data: dataUrl,
})
ws.send(object)
const object = JSON.stringify({
    action: "add_image",
    data: dataUrl,
})
fetch("http://localhost:3001/add_image", {
    method: "POST",
    headers: new Headers({
        Origin: window.origin,
        Accept: "image/png",
        "Content-Type": "image/png",
    }),
    mode: "cors",
    body: object,
})
服务器:

ws.on("message", (message) => {

    const req = JSON.parse(message);

    fs.writeFile(
        "path/to/file.png",
        data.split(";base64,").pop(),
        { encoding: "base64" },
        (err) => err && console.log(err)
    )
}
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.post("/add_image", function (req, res) {
    console.log(req.body);
});
这是我试图通过http请求获得相同的结果

客户:

const object = JSON.stringify({
    action: "add_image",
    data: dataUrl,
})
ws.send(object)
const object = JSON.stringify({
    action: "add_image",
    data: dataUrl,
})
fetch("http://localhost:3001/add_image", {
    method: "POST",
    headers: new Headers({
        Origin: window.origin,
        Accept: "image/png",
        "Content-Type": "image/png",
    }),
    mode: "cors",
    body: object,
})
服务器:

ws.on("message", (message) => {

    const req = JSON.parse(message);

    fs.writeFile(
        "path/to/file.png",
        data.split(";base64,").pop(),
        { encoding: "base64" },
        (err) => err && console.log(err)
    )
}
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.post("/add_image", function (req, res) {
    console.log(req.body);
});
不幸的是,req.body总是记录一个空对象

我不太清楚我缺少什么。任何帮助都将不胜感激。

我在文章中找到了答案。我需要合并请求的所有单个块,然后在流程完成后使用数据

app.post("/add_image", function (req, res) {

    let body = '';

    req.on('data', chunk => {
        body += chunk.toString();
    });

    req.on('end', () => {
        console.log(JSON.parse(body));
        res.end('ok');
    });

});