Connexion客户端与nodeJs
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Connexion客户端与nodeJs相关的知识,希望对你有一定的参考价值。
我是nodeJs的新手,我找不到我的问题的解决方案。我有一个登录界面我不会在2个用户连接后显示警报。我的问题是警报始终显示在连接之前第二个用户。如何在第二个用户登录后显示:这是我的client.js代码:
var socket = io.connect('http://localhost:5050');
$('#loginform').submit(function(event){
event.preventDefault();
socket.emit('login' , {
username : $('#username').val(),
mail : $('#mail').val()
})
});
socket.on('loged' , function(){
$('#login').fadeOut();
});
socket.on('newuser' , function(user){
$('#users').append('<img src="' + user.avatar + '">');
})
我的代码server.js
var http = require('http');
var fs = require('fs');
var md5 = require('MD5');
var alert=require('alert-node');
var server = http.createServer(function(req, res) {
fs.readFile('./index.html', 'utf-8', function(error, content) {
res.writeHead(200, {"Content-Type": "text/html"});
res.end(content);
});
});
var io = require('socket.io').listen(server);
var users = {};
var i=0;
io.sockets.on('connection', function (socket,user) {
var me;
console.log('new user is connected');
for (k in users) {
socket.emit('newuser' , users[k]);
}
socket.on('login' , function(user){
me=user;
me.id=user.mail.replace('@','-').replace('.','-');
me.avatar = 'https://gravatar.com/avatar/' + md5(user.mail) + '?s=50';
socket.emit('loged');
users[me.id] = me;
io.sockets.emit('newuser', me);
});
});
server.listen(5050);
答案
我没有在你的代码上看到任何警报,所以我假设如下,你可以通过i++
或断开i--
检查有多少用户连接,但你不在代码中的任何地方使用它,在这种情况下我使用Map
存储用户。请注意,如果您在Node.js脚本中使用alert-node
,它将只使用console.log
,如果您在浏览器中包含它将使用普通的alert
所以..
const http = require('http');
const fs = require('fs');
const md5 = require('MD5');
const alert=require('alert-node');
var server = http.createServer(function(req, res) {
fs.readFile('./index.html', 'utf-8', function(error, content) {
res.writeHead(200, {"Content-Type": "text/html"});
res.end(content);
});
});
var io = require('socket.io').listen(server);
var users = new Map();
io.sockets.on('connection', function (socket,user) {
console.log('new user is connected');
for (k in users) {
socket.emit('newuser' , users[k]);
}
socket.on('login' , function(user){
let me = user;
me.id=user.mail.replace('@','-').replace('.','-');
me.avatar = 'https://gravatar.com/avatar/' + md5(me.mail) + '?s=50';
users.set(me.id,me)
io.sockets.emit('newuser', me);
socket.emit('loged');
if(users.size === 2){
// notify that they are two users connected?
}
});
});
server.listen(5050);
我个人会创建一个扩展EventEmitter的类,并使用它更容易维护等等。
以上是关于Connexion客户端与nodeJs的主要内容,如果未能解决你的问题,请参考以下文章
使用 NodeJS 和 JSDOM/jQuery 从代码片段构建 PHP 页面
javascript 用于在节点#nodejs #javascript内设置react app的代码片段