NodeJS 处理已过帐数据

cgh8pdjw  于 2022-12-29  发布在  Node.js
关注(0)|答案(2)|浏览(158)

我有两个服务器(A和B),我用axios从服务器A向B发送一个数据,并在另一个服务器上进行console.log,但是数据不在服务器A发送的消息中。
服务器A:

var http = require('http')
var axios = require('axios')

const data = {name: 'karo', age: 18, email: 'karoakhgar82@hotmail.com'}

http.createServer(function(req, res){
        res.writeHead(200, {'Content-Type' : 'application\json'})
        res.end(JSON.stringify(data))
        

}).listen(1337,'127.0.0.1')

const api = axios.create({baseURL: 'http://127.0.0.1:1338'})
api.post('/', {
    data: JSON.stringify(data)
})
.then(res => {
     console.log(res)
})
.catch(error => {
     console.log(error)
})

服务器B:

var http = require('http')

http.createServer(function(req, res){
        console.log(req);
        res.writeHead(200, {'Content-Type' : 'text/plain'})
        res.end('hello world')

}).listen(1338,'127.0.0.1')

我也尝试了http请求,它是相同的

bkkx9g8r

bkkx9g8r1#

记录res.data而不是res

api.post('/', {
    data: JSON.stringify(data)
})
.then(res => {
     //log res.data instead of res
     console.log(res.data)
})
.catch(error => {
     console.log(error)
})

如果要在服务器B中记录从服务器A接收的数据:
服务器B目录中的npm i body。服务器B:

var http = require('http');

var anyBody = require("body/any")

http.createServer(function(req, res){
    console.log(req);
    anyBody(req, res, {}, (err,data)=>{console.log(data)});
    res.writeHead(200, {'Content-Type' : 'text/plain'});
    res.end('hello world')

}).listen(1338,'127.0.0.1');
2lpgd968

2lpgd9682#

请求对象req不包含请求主体作为字符串,因为主体是由客户端流传输的,将其写入字符串意味着等待流传输完成,然后请求处理程序才能开始构建响应对象res,但这将非常不灵活。
下面的代码指示请求处理程序等待正文,然后记录它:

http.createServer(async function(req, res) {
  var body = "";
  for await (var chunk of req) body += chunk.toString();
  console.log(body);
  res.writeHead(200, {'Content-Type' : 'text/plain'});
  res.end('hello world')
});

相关问题