Javascript 无法使用socket.io发送post请求
这里,我将数据从套接字客户端发送到套接字服务器,在收到请求后,它必须发送到节点api **问题是在调用套接字服务器时,im变为null** 下面是我的代码 套接字客户端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
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);…