2012-11-15 6 views
0

Я начал искать socket.io и некоторые MongoDB с mongojs.socket.io возвращает [объект Object] из запроса mongojs

Реферат: Клиент не отправляет данные на сервер через socket.io, поэтому mongojs не имеет ничего, что нужно искать, и просто возвращает первый документ в коллекции, я бы хотел, чтобы он возвращал значение null или false, поэтому я могу принять соответствующие действия. Любая помощь оценена, очень новая для node.js и этого.

Мне нужен журнал в функции, но когда я нажимаю ссылку я сделал, чтобы войти, это должно работать с клиентом:

<script> 
     var socket = io.connect('http://localhost:13163'); 

     socket.on('connect', function() { 
      socket.emit(console.log('Client connected')); 
     }); 
     socket.on('queryResponse', function (res, err) { 
      if (res == "[object Object]") { 
       console.log('EMPTY OBJ SERVER: ' + res + ' ' + err); 
      } 
      else{ 
       console.log('IF NOT EXEC' + res[0].email) 
      } 
     }); 
     //socket.send('client hello'); 
     //pageload 
     $(function() { 
      $('#login').click(function() { 
       var username = $('#username').val(); 
       var password = $('#password').val(); 
       if (!username || !password) { 
        event.preventDefault(); 
        console.log('Need data in both fields'); 
       } 
       else { 
        event.preventDefault(); 
        socket.emit('querydata', function (username, password) { 
         console.log("CLIENT: Querying server for data..."); 
        }); 
       } 
      }); 
     }); 
    </script> 

Это должно отправить имя пользователя и пароль для доступа к серверу, который должен затем выполните следующее:

socket.on('querydata', function (user_username, user_password) { 
    db.users.find({email: user_username, pass: user_password}, function (err, docs) { 
     if (err || !docs) { 
      socket.emit('queryResponse', 'No users found', err); 
      console.log('if - ' + docs[0].email); 
     } 
     else { 
      socket.emit('queryResponse', docs); 
      console.log('else - ' + docs[0].email + 'user_password' + user_password + 'user_username' + user_username); 
     } 
    }); 
}); 

Что странно в том, что он находит только первый документ коллекции. Я только что узнал, что перегрузки 'user_username' и 'user_password' не определены, это просто некоторая ошибка с моей стороны?

ответ

2

Вы делаете это неправильно. В первом взгляде я вижу пару ошибок в вашем коде. Первый здесь

if (res == "[object Object]") 

Вы не можете контролировать содержимое ответа в этом пути. Вероятно, вы видите строку [object Object] в своем отладчике javascript. Вы должны сделать это сравнение в соответствии с ответом сервера как данные json. Если это приведет к возникновению проблемы, вы можете использовать JSON.parse (response).

Во-вторых, вы не отправляете имя пользователя и пароль на сервер. Вы должны использовать

socket.emit('querydata', { username: username, password: password }, function (data) { 
    // Server Ack here 
} 

вместо

socket.emit('querydata', function (username, password) ... 

И попробовать этот

socket.emit('queryResponse', {err: 'No User Found'}); 

вместо внесения
socket.emit('queryResponse', 'No User Found', err); 

И в вашем клиенте проверить реакцию как

if(response.hasOwnProperty('err'))//Handle error 

У вас на стороне клиента queryResponse слушатель, попробуйте это;

socket.on('queryResponse', function (res) { 
     if(res.hasOwnProperty('err'))/Handle Error 
     else // You have an array in `res` 
    }); 
+0

Спасибо, что помогли на сервере server.js, все еще не имея возможности вернуть данные клиенту. Мне нужно проверить, есть ли в документе правильные данные, и если есть перенаправление и задание сеанса, но если я попытаюсь использовать JSON.parse (docs), я получу эту ошибку: Uncaught SyntaxError: Неожиданный токен u localhost: 39 (анонимная функция) локальный: 39 EventEmitter.emit socket.io.js: 633 SocketNamespace.onPacket socket.io.js: 2248 Socket.onPacket socket.io.js: 1930 Transport.onPacket socket.io.js : 1332 Transport.onData socket.io.js: 1303 stateChange – mackwerk

+0

обновил ответ, попробуйте обновленную часть и дайте мне знать, как это происходит. –

+0

Ну, я никогда не получаю ошибку, потому что он всегда возвращает что-то, например, если я ввожу имя пользователя: asd и пароль: asd это то, что он возвращает: 'xhr-polling writing 5 ::: {" name ":" queryResponse ", "args": [{"email": "asd", "pass": "asd"}]} ' – mackwerk

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

  • Нет связанных вопросов^_^