首页 > 解决方案 > 无法使用 socket.io 发送发布请求

问题描述

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

**问题是我在调用下面的套接字服务器时得到空**是我的代码

套接字客户端

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

});

节点接口

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

我试过但无法理解问题注:如何将 Socket 服务器转换为表达 js 代码

标签: javascriptnode.jssocket.io

解决方案


据我了解,您愿意使用 express 而不是 HTTP,这将解决您的问题。在下面的代码中,我使用了 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');
  });

});

推荐阅读