2016-07-22 73 views
0

我正在尝试使用socket.io和node.js来创建应用程序。这是一个简单的“登录”应用程序,但它似乎并没有工作,每当我启动应用程序时,在该C​​hromeress的Chrome开发者控制台上弹出404未找到消息:http://localhost:3000/socket.io/?EIO=3&transport=polling&t=1469215104245-2socket.io和node.js不能正常工作

在我的索引中。 HJS文件

<div class="input-group"> 
    <span class="input-group-addon" id="basic-addon1"></span> 
    <input type="text" class="form-control username" placeholder="Username" aria-describedby="basic-addon1"> 
</div> 
<div class="input-group"> 
    <span class="input-group-addon" id="basic-addon1"></span> 
    <input type="text" class="form-control password" placeholder="Password" aria-describedby="basic-addon1"> 
</div> 
<button type="button" class="btn btn-primary">Primary</button> 
<h2></h2> 

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script> 
<script type="text/javascript"> 
    var socket = io(); 
     $('.btn-primary').click(function(){ 
     var data = {username: $('.username').val(), password: $('.password').val()}; 
     socket.emit('log-in',data); 

     socket.on('log-in success', function(){ 
      $('h2').append('success') 
     }); 
     socket.on('log-in fail', function(){ 
      $('h2').append('fail') 
     }); 


     }); 


</script> 
我的节点JS服务器上

(有更多的代码存在,但这些都是rlevant位):

var app = express(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 
var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost:27017/userDB'); 
var userSchema = mongoose.Schema({ 
    name: String, 
    password: String 
}); 
var User = mongoose.model('User', userSchema); 


io.on('log-in',function(data){ 
    User.findOne({ 'username': data.username, 'password': data.password}, function (err, person) { 
    if (err) {io.emit('log-in fail') 
     return handleError(err)}; 
    if (!person) io.emit('log-in success'); 
    }) 
}); 

每当我试图登录的用户预制只是不明白任何回应。 任何帮助将不胜感激。

回答

0

您不会收听来自服务器上给定连接的消息,其中io.on()。相反,您可以在此处侦听给定的套接字连接,然后将事件处理程序添加到该特定的套接字,并且当您想要发送回该套接字时,还可以使用该对象发送回该套接字。这使您可以发送回,只是给你发了消息,同一插座:

io.on('connection', function (socket) { 
    socket.on('log-in', function (data) { 
     User.findOne({'username': data.username, 'password': data.password}, function (err, person) { 
      if (err) { 
       socket.emit('log-in fail') 
       return handleError(err) 
      }; 
      if (!person) socket.emit('log-in success'); 
     }) 
    }); 
}); 

但是,你可能也想知道,有一个为socket.io连接认证的框架,使得它多一点的内置部分接受连接。如果你愿意,你可以像这样做自己的事情,但它可能会有一些你没有想到的问题。

P.S.这个逻辑看起来有点缺陷。如果在数据库中找到该人员,则不会在套接字上发出任何响应。