我有背部和前端运行在LAMP环境可访问192.168.80.213/backend
192.168.80.213/frontend
。express nodejs socket.io LAMP
我尝试使用nodejs,socket.io和express框架来建立一个推送通知服务器来连接后端和前端。
示例:从前端用户为了什么,我发出插座,从前端的NodeJS我的服务器,然后服务器的NodeJS发射到后端实时通知“嗨,你已经有了新的秩序”
我的服务器的NodeJS是听在端口3000
,而我的后端和前端使用apache在端口80上进行侦听。
这里是我的节点客户端上的后端:
<script type="text/javascript" src="script/javascript/socket.io-1.4.5.js"></script>
<script type="text/javascript">
var socket = io('http://192.168.80.213:3000/');
</script>
很简单isnt'it?
这里是我的节点服务器:
const express = require('express')
, app = express()
, http = require('http').Server(app)
, socketIo = require('socket.io')(http)
, cookieParser = require('cookie-parser')
, cookie = require('cookie')
, connect = require('connect')
, expressSession = require('express-session')
, port = 3000
, helmet = require('helmet')
, name = 'connect.sid'
, sessionStore = new expressSession.MemoryStore({ reapInterval: 60000 * 10 })
, sessionSecret = 'VH6cJa7yZSmkRbmjZW#J3%CDn%dt'
, environment = process.env.NODE_ENV || 'development'
;
/** Configuration **/
app.enable('trust proxy');
app.disable('x-powered-by');
app.use(helmet());
app.use(cookieParser());
app.use(expressSession({
'name' : name,
'secret': sessionSecret,
'store' : sessionStore,
'resave': true,
'saveUninitialized': true
}));
app.get('/', function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello from node');
});
socketIo.use(function(socket, callback) {
// Read cookies from handshake headers
var cookies = cookie.parse(socket.handshake.headers.cookie);
// We're now able to retrieve session ID
var sessionID;
if (cookies[name]) {
console.log("cookies['" + name + "'] = " + cookies[name]);
sessionID = cookieParser.signedCookie(cookies[name], sessionSecret);
console.log("sessionID = " + sessionID);
}else{
console.log("cookies['" + name + "'] = undefined");
}
if (!sessionID) {
console.log('ERROR NO SESSION CONNECTION REFUSED !!');
callback('No session', false);
} else {
// Store session ID in handshake data, we'll use it later to associate
// session with open sockets
socket.handshake.sessionID = sessionID;
callback(null, true);
}
});
socketIo.on('connection', function (socket) { // New client
console.log('new connection..');
console.log('user ' + socket.handshake.sessionID + ' authenticated and is now connected.');
});
/** Start server */
http.listen(port);
console.log("listening on :" + port);
转到192.168.80.213:3000
和看从节点你好'和饼干[ 'connect.sid']根据下面
和控制台输出:
现在清除缓存,我要去我的后端应用程序,我的nodeClient 192.168.80.213/backend
。
connect.sid cookie不存在
和控制台输出:
为什么快递-session不会设置cookie.sid?我该如何解决这个问题?我是新来的节点和表达,我花了很多次搜索没有成功,希望一些节点大师coul帮助我!
问候
编辑1
我加入这个在我的Apache的conf
ProxyPass /node http://localhost:3000/
ProxyPassReverse /node http://localhost:3000/
ProxyPreserveHost On
这样我就可以访问我的节点逻辑与192.168.80.213/node
但现在在我的客户端我得到错误:
var socket = io('http://192.168.80.213/node');
192.168.80.213/socket.io/?EIO=3&transport=polling&t=LeehEkF 404 (Not Found)
我看到io路径选项可能是诀窍。我应该为道路设定什么样的价值?! – akio