繁体   English   中英

Node.js:使用快递访问 HTTP 的 JSON 主体

[英]Node.js: Access JSON body of HTTP POST request with express

我正在向我的快递 web 服务器发出 http 发布请求,将虚拟数据发送为 json。 它正确接收请求并可以发回 json object,但由于某种原因它无法访问发布请求正文。

我正在使用此代码进行快递:

const express = require('express');
const app = express();
const port = 3000;

app.post('/test', (req, res) => {
  console.log(req.body);
  res.json({"some": "thing"});
});

app.listen(port, () => {
  console.log(`Listening at http://localhost:${port}`)
});

这是请求的代码:

const req = http.request({
    hostname: '127.0.0.1',
    port: 3000,
    path: '/test',
    method: 'POST',
    json: {
        url: "https://www.nothing.com",
        name: "hello"
    }
}, res => {
    console.log(`statusCode: ${res.statusCode}`)
  
    res.on('data', d => {
      process.stdout.write(d)
    })
  })
  
  req.on('error', error => {
    console.error(error)
  })
  
  req.end()

如您所见,我正在本地运行它。 客户端收到服务器发送的状态码 200 和 json {"some": "thing"},但服务器从 req.body 获取“未定义”。 我尝试使用:

headers: {
   'Content-Type': 'application/json'
}
body: JSON.stringify({
            url: "https://www.nothing.com",
            name: "hello"
        })

而不是 json 直接在请求选项中,但无济于事。 我什至尝试使用app.use(express.json()); 正如有人建议的那样。

问题是什么?

显然我进行发布请求的方式不正确,我不得不使用 req.write() 在单独的行中发送正文,如下所示:

const http = require('http');
const data = JSON.stringify({ //<--- data to send as body
    url: "https://www.nothing.com",
    name: "hello"
});

const req = http.request({
    hostname: '127.0.0.1',
    port: 3000,
    path: '/test',
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    }
}, res => {
    console.log(`statusCode: ${res.statusCode}`);
  
    res.on('data', d => {
      process.stdout.write(d);
    })
  })
  
  req.on('error', error => {
    console.error(error);
  })
  req.write(data); //<--- this line
  req.end();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM