Как использовать сокет io для перекрестного источника (Socket io не работает для перекрестного источника) - PullRequest
0 голосов
/ 12 марта 2019

Я работаю в сокете IO с узлом JS.Когда я что-то излучаю с сервера, он работает нормально с тем же клиентом происхождения.но когда я меняю свой порт для клиентского сайта, он не работает.

Index.js

import 'babel-polyfill';
import express from 'express';
import bodyParser from 'body-parser';
import morgan from 'morgan';
import cors from 'cors';
import passport from 'passport';
import environment from '../environment';
import mongoose from './config/mongoose';
import error from './middlewares/error';
import routes from './app/routes/';
import path from 'path';
import http from 'http';
import SocketIO from 'socket.io';

require('./config/passport')(passport);
// getting application environment
const env = process.env.NODE_ENV;
// getting application config based on environment
const envConfig = environment[env];
// setting port value
const PORT = envConfig.port || 4321;
let app = express();
let server = http.Server(app);
let io = new SocketIO(server, {'origins' : '*:*'});
app.io = io;
app.use(cors());
// open mongoose connection
mongoose.connect(envConfig, env);
// request logging. dev: console | production: file
app.use(morgan(envConfig.logs));
// parse body params and attache them to req.body
app.use(bodyParser.json({
    limit: '50mb'
}));
app.use(bodyParser.urlencoded({
 limit: '50mb',
 extended: true
}));
app.use(express.static(path.join(__dirname, 'public')));
// enable CORS - Cross Origin Resource Sharing
app.set('view engine', 'ejs');
// mount api routes
app.use('/', routes);
// if error is not an instanceOf APIError, convert it.
app.use(error.converter);
// catch 404 and forward to error handler
app.use(error.notFound);
// error handler, send stacktrace only during development
app.use(error.handler);
//
app.use(passport.initialize());
server.listen(PORT, () => {
    console.log('[INFO] Listening on *:' + PORT);
});
module.exports = app;

Controller.js

import Message from '../../../config/message';
import UsersModel from '../../models/users.model';
import TweetModel from '../../models/tweet.model';
import socket from '../../../utils/socket';

exports.createTweet = async (req, res) => {
try {
    const {
        params
    } = req.body;
    const data = TweetModel({
        fkUserUId: fkUserUId,
        tweetDescription: params.tweetDescription,
        blockId: params.blockId,
        fileType: params.fileType ? params.fileType : '',
        fileName: params.fileName ? params.fileName : '',
    });
    await TweetModel(data).save().then((blockData) => {
        req.app.io.emit('message', blockData);
        res.send({
            code: 200,
            message: Message.infoMessage.tweetCreate,
            data: blockData,
            error: []
        });
    }).catch(err => {
        console.log('err', err)
        res.send({
            code: 400,
            message: Message.errorMessage.genericError,
            data: [],
            error: err
        });
    });

   } catch (err) {
    console.log('err', err)
    res.send({
        code: 400,
        message: Message.errorMessage.genericError,
        data: [],
        error: err
    });
}
}

Объяснение

У меня есть много контроллеров, на которых мне нужно выдать сообщение, поэтому я связываю сокет io с приложением.

Клиент перекрестного происхожденияответ сайта на рукопожатие

96: 0 {"sid": "LBCIBE9RNm_jeumuAAAe", "updates": ["websocket"], "pingInterval": 25000, "pingTimeout": 5000} 2:40

Кроме того, не отображаются какие-либо ошибки (например, перекрестные источники и т. Д.)

Ожидаемый результат

Когда я излучаючто-то с сайта сервера будет отражено на сайте клиента

Пожалуйста, просмотрите мой код и оставьте отзыв.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...