【问题标题】:Access post body without bodyparser在没有 bodyparser 的情况下访问帖子正文
【发布时间】:2021-07-30 18:55:32
【问题描述】:

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

客户:

const object = JSON.stringify({
    action: "add_image",
    data: dataUrl,
})
ws.send(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)
    )
}

这是我尝试通过 http 请求获得相同的结果。

客户:

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,
})

服务器:

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.post("/add_image", function (req, res) {
    console.log(req.body);
});

不幸的是,req.body 总是记录一个空对象。

我不太确定我缺少什么。任何帮助将不胜感激。

【问题讨论】:

    标签: express http websocket


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-07-01
      • 2011-07-31
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多