Мне нужно передать данные только пользователю, запрашивающему его. До сих пор я получаю:node.js с socket.io - как передавать данные ТОЛЬКО пользователю, запрашивающему его (в экспресс-маршруте)?
app.js файл (сервер):
var express = require('express');
var app = express();
app.set('view engine', 'ejs');
app.use(function(req, res, next){
req.io = io;
next();
});
var mainPath = require('./routes/mainPath.js');
app.use('/', mainpath);
port = 8000;
var io = require('socket.io').listen(app.listen(port));
io.on('connection', function(socket){
console.log('connected');
});
mainpath.js файла: [!]
var express = require('express');
var app = express();
var router = express.Router();
var request = require('request');
router.post('/path', function(req, res){
request('http://google.com', function (err, resp, content_body){
req.io.emit('socketio emit', {socketioEmit : body});
});
});
// [!]
module.exports = router;
проблема появляется, когда .. запрос, используемый здесь, например (или любые быстрые исполняемые данные), быстрее захватить данные, а затем установить соединение socket.io, и пользователь не получает данные.
io.js файл (клиент):
var socket = io();
socket.on('connect', function(){
console.log('connected');
});
socket.on('socketio emit', function(emit){
console.log(emit.socketioEmit);
});
mainpath.ejs файл:
<html>
<head></head>
<body>
<div class="form_seo_wrapper">
<form action="/path" method="post">
<input type="text" name="input_name" />
<input type="submit" value="go" />
</form>
</div>
</body>
</html>
path.ejs файл:
<html>
<head></head>
<script src="socket.io.min_v1.7.2.js"></script>
<body>
<h1>Output:</h1>
</body>
<script src="io.js"></script>
</html>
Есть идеи? BTW есть ли возможность не нарушать соединение сокета, когда пользователь вводит от '/' до '/ path'?
Благодарим Вас за вход! Я обновил свой вопрос, чтобы вы могли лучше настроить ответ. Я думаю, проблема связана с ** socket ** data - _io.on ('connection', function (socket) _ - Я могу подключаться к маршрутам, но я не могу получить доступ к io.socket ... – webmasternewbie
@webmasternewbie check my обновленный ответ –
Еще раз спасибо за ваш ценный вклад! Я использовал комнаты - socket.join (номер), с идентификатором сокета. Однако, когда я оцениваю данные после _req.io.emit ('socketio emit', {socketioEmit: data}); в файле ** mainpath.js ** иногда сокет-соединение с сервером появляется ПОСЛЕ испускания данных, поэтому пользователь просто не видит данные. Любая идея, как это разрешить?Для того, чтобы не нарушать соединение при изменении маршрута - это cookie (с идентификатором) - хорошее решение, или есть более простой метод? – webmasternewbie