【发布时间】:2014-03-30 18:36:03
【问题描述】:
我目前遇到了 Node JS 的问题,试图通过会话身份验证进行非常简单的聊天。 authent 没问题,但是 socket.emit 事件(服务器端)没有被 socket.on 事件(客户端)捕获。 这里是代码。 文件 app.js:
app.get('/chat', [requireLogin], require('./lib/chat.js').chat(io));
文件 lib/chat.js :
exports.chat = function(io){
return function(req,res) {
res.render('chat');
var ent = require('ent'); // same as htmlentities for PHP
io.sockets.on('connection', function (socket) {
var username = ent.encode(socket.handshake.username);
console.log('first_connection:'+username);
socket.emit('first_connection', username);
socket.on('connect_success', function() {
console.log('connect_success:'+username);
socket.broadcast.emit('join', username);
});
});
}
};
和客户端:
var sio = io.connect(), socket = sio.socket.of('/chat');
socket.on('first_connection', function (pseudo) {
console.log('first_connection is caught. Pseudo:'+pseudo);
document.title = pseudo + ' - ' + document.title;
socket.emit('connect_success');
});
我没有在客户端登录,在服务器端登录:
first_connection:Test
debug - websocket writing 5:::{"name":"first_connection","args":["Test"]}
[编辑] 这是 IO 套接字的声明,在我的 app.js 文件中:
const
express = require('express'),
path = require('path'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server),
fs = require('fs'),
connect = require('express/node_modules/connect'),
cookie = require('express/node_modules/cookie')
;
【问题讨论】:
-
NodeJS 套接字没有任何这些属性。您大概在使用什么库?
-
另外,检查相关列表是否有重复项。
-
感谢@OrangeDog 的回答 :) 你在说哪个属性?我编辑添加了 io 套接字的声明。我实际上在控制台上没有错误,在服务器端和客户端也没有。