Javascript 无法使用socket.io发送post请求

Javascript 无法使用socket.io发送post请求,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,这里,我将数据从套接字客户端发送到套接字服务器,在收到请求后,它必须发送到节点api **问题是在调用套接字服务器时,im变为null** 下面是我的代码 套接字客户端 socket.connect(); socket.emit("posreq",JSON.stringify({ "title": "data"})); 套接字服务器 var http = require('http'), io = require('socket

这里,我将数据从套接字客户端发送到套接字服务器,在收到请求后,它必须发送到节点api

**问题是在调用套接字服务器时,im变为null** 下面是我的代码

套接字客户端

socket.connect();

socket.emit("posreq",JSON.stringify({ "title": "data"}));
套接字服务器

var http = require('http'),
  io = require('socket.io'), // for npm, otherwise use require('./path/to/socket.io') 
  request = require('request'),
  cors = require('cors'),
  server = http.createServer(function (req, res) {
    // your normal server code 
    res.writeHead(200, {
      'Content-Type': 'application/json'
    });
    res.end('Hello world');
  });
  
server.listen(4000);

// socket.io 
var socket = io.listen(server);
socket.on('connection', function (client) {
  // new client is here! 
  
  client.on('posreq', function (postdata) {
    request.post("http://localhost:3000/book", {
      body: postdata
    }, function (res) {
      console.log(res);
      client.send("post req called",postdata);
    });

  });




  client.on('disconnect', function () {
    console.log('connection closed');
  });

});
节点api

const express = require('express')
const bodyParser = require('body-parser');
const cors = require('cors');

const app = express()
const port = 3000

let books = [{
    "title": "Eloquent JavaScript, Second Edition",
   }];

app.use(cors());

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

app.post('/book', (req, res) => {
    const book = req.body;

    // output the book to the console for debugging
    console.log(book);
  //  books.push(book);

    res.json('Book is added to the database');
});
我试过了,但无法理解这个问题
注意:据我所知,您愿意使用express而不是HTTP,这将解决您的问题。如何将套接字服务器转换为express js代码。在下面的代码中,我使用了express和HTTP。请尝试下面的代码

const express=require("express")
const app=express()
const server=require("http").createServer(app)
const socket=require("socket.io")(server)
server.listen(4000,()=>console.log(`Listening to port 4000`))

socket.on('connection', function (client) {

client.on('posreq', function (postdata) {
 request.post("http://localhost:3000/book", {
   body: postdata
 }, function (res) {
   console.log(res);
   client.send("post req called",postdata);
 });

});


client.on('disconnect', function () {
    console.log('connection closed');
  });

});

也许你需要一些修改, 因此,最好使用或其他替代方法

const express = require("express")
const bodyParser = require("body-parser")
const axios = require('axios')
const app = express()

const httpServer = require("http").createServer(app)
const socket = require("socket.io")(server)

app.use(bodyParser.json({ limit: '16mb' }));
app.use(bodyParser.urlencoded({ limit: '16mb', extended: true, parameterLimit: 50000 }));

app.get('/', (req,res)=> res.send("Hello world"));

socket.on('connection', function (socket) {

    socket.on('posreq', async (body) => {
        try {
            const { data } = await axios.post("http://localhost:3000/book", { body })
            socket.send("post req called", data);
        } catch (error) {
            socket.send("post req error", error);
        }

    });


    socket.on('disconnect', function () {
        console.log('connection closed');
    });

});

httpServer.listen(3000, () => console.log(`Spinning 3000`))

我认为问题来自您正在收听的端口,您还必须收听端口3000,尝试将其更改为
server.listen(3000)传递给request.post的回调函数的第一个参数是错误的。所以得到null实际上是件好事,这意味着没有错误。使用
request.post(…,函数(err,res,body){console.log(err,res,body);…