2016-07-22 6 views
0

Я пытаюсь практиковать создание приложений с помощью socket.io и node.js. Это простое приложение для входа в систему, но, похоже, оно не работает, и когда я запускаю приложение, 40% -ное сообщение не появляется на консоли Chrome с этим адресом: 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'); 
    }) 
}); 

Всякий раз, когда я пытаюсь войти как Premade пользователь просто не любой ответ назад. Любая помощь будет высоко оценена.

ответ

0

Вы не слушаете сообщения с данного соединения на сервере с io.on(). Вместо этого вы делаете это, когда слушаете данный сокет, а затем добавляете обработчики событий в этот конкретный сокет, и когда вы хотите отправить обратно в этот сокет, вы также используете этот объект socket для отправки обратно. Это позволяет отправлять обратно в тот же сокет, который только что отправил вам сообщение:

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. Эта логика выглядит немного ошибочной для меня. Если вы находите человека в своей базе данных, вы не получаете ответа на сокет.

Смежные вопросы