Соединение с socket.io не работает с response.js - PullRequest
0 голосов
/ 11 января 2019

У меня есть проектactjs и node.js. Теперь мне нужно настроить socket.io в моем проекте. Но после набора я получаю 404 ошибку. Я устал использовать перекрестные и другие методы, но все равно получаю ту же ошибку 404. Заранее спасибо

index.js

const express = require("express");
const port = 3000;
const app = express();
const url = require("url");
var http = require('http').Server(app);
var io = require('socket.io')(http);

const origin = url.parse(`http://${process.env.CII_RESTURL || "localhost"}/`)
.origin;
var cors = require("cors");
app.use(cors());
var bodyParser = require("body-parser");

var path = require("path");
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var router = express.Router();
app.set("port", port);
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");
app.use(express.json());
app.use(express.static(__dirname + "./../../"));
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header(
    "Access-Control-Allow-Headers",
    "Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With"
);
res.header("Access-Control-Allow-Origin", req.headers.origin);
res.header('Access-Control-Allow-Credentials', true);
next();
});
// create a GET route
app.get("/express_backend", (req, res) => {
res.send({ express: "YOUR EXPRESS BACKEND IS CONNECTED TO REACT" });
});

app.use("/api", router);
var getTags = require("./routes/search");

router.get("/jobSearch", plainSearch.SearchByJob);
// console.log that your server is up and running
app.listen(port, () => {
console.log(`Listening on port: ${port}`);
console.log("Application live on the hostname: " + origin);
});

router.get("/",function(req,res){
res.send("hi")
})
//io.origins(cors());
io.on('connection', function(socket){
console.log("sd");
socket.on('subscribeToTimer', function(msg){
    console.log('message: ' + msg); 
});
});

Реагирующий компонент

import io from 'socket.io-client';

const socket = io("http://localhost:3000/",{
    path: '/api'
});

    subscribeToTimer(cb) {
    alert("sd");
    socket.on('timer', timestamp => cb(null, timestamp));
    socket.emit('subscribeToTimer', 1000);
} 

вызов функции subscribeToTimer в конструкторе.

1 Ответ

0 голосов
/ 11 января 2019

Похоже, вы не использовали правильный метод реакции жизненного цикла для прослушивания сокетов. Всегда используйте componentDidMount() для прослушивания сокетов или отправки запросов API. Попробуйте что-то вроде этого.

   subscribeToTimer(cb) {
        alert("sd");
        socket.on('timer', timestamp => cb(null, timestamp));
        socket.emit('subscribeToTimer', 1000);
    }      

     componentDidMount(){
        subscribeToTimer(cb);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...