簡體   English   中英

socket.io和node.js無法正常工作

[英]socket.io and node.js not working properly

我正在嘗試練習使用socket.io和node.js創建應用程序。 這是一個簡單的“登錄”應用程序,但似乎不起作用,每當我啟動該應用程序時,在chrome開發者控制台上都會彈出一個404 not found消息,並顯示以下地址: http:// localhost:3000 / socket .io /?EIO = 3&transport = polling&t = 1469215104245-2

在我的index.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服務器上(那里有更多代碼,但這些是相關的位):

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');
  })
});

每當我嘗試以預制用戶身份登錄時,都不會得到任何回復。 任何幫助將非常感激。

您不會使用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連接身份驗證的框架,它使它成為接受連接的內置部分。 如果願意,您可以這樣做,但是可能會遇到一些您沒有想到的問題。

PS:這種邏輯對我來說有點瑕疵。 如果在數據庫中找到該人,則不會在套接字上發出任何響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM