Я работаю в сокете 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
Кроме того, не отображаются какие-либо ошибки (например, перекрестные источники и т. Д.)
Ожидаемый результат
Когда я излучаючто-то с сайта сервера будет отражено на сайте клиента
Пожалуйста, просмотрите мой код и оставьте отзыв.