簡體   English   中英

Socket.emit沒有通過

[英]Socket.emit not going through

index.js

var app = require('express')();
var path = require('path');
var server = require('http').Server(app);
var io = require('socket.io')(server);
var users = [];

connections = [];

server.listen(process.env.PORT || 3000);
app.use(require('express').static(path.join(__dirname)));

console.log('server running');

app.get('/', function(req, res){
    res.sendfile(__dirname + '/index.html');
});

io.on('connection', function (socket) {
    var addedUser = false;
    socket.on('new post', function(post){
        console.log(post);
        socket.emit('posted', data);
    }); 
});

client.js

$(function(){

    function submit(){
        socket.emit('new post', $("#text").val());
        console.log("submitted");   
    }

    function addPost(data){
        console.log(2);
        var $post = $('<p></p>').text(data);
        console.log($post);
        $("#posts").append($post);  
    }

    $("#submit").on("click", function(){
        submit();
    });

    socket.on('posted', function(data){
        console.log(1);
        addPost(data);  
    });
});

index.html

<html>
    <head>
        <title>title</title>
        <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    </head>

    <body>
    <input type="text" id="text">Input</input>
    <button id="submit">Submit</button>


    <script src="client.js"></script>

    <br>
    <br>
    <br>

    <div id="posts"></div>
    <script>
        var socket = io();
    </script>
    </body>

</html>

當我啟動服務器時,控制台會記錄“服務器正在運行”。 我無法讓“提交帖子”按鈕執行任何操作。 沒有任何調試控制台消息出現,並且沒有任何反應。 當單擊“提交”按鈕時,它應該會發出“新帖子”,但看起來好像什么都沒有通過

我能夠使您的代碼在我自己的計算機上運行,​​如下所示:

index.js

var express = require('express');
var app = express();

var path = require('path');
var server = require('http').Server(app);
var io = require('socket.io')(server);
var users = [];

connections = [];

app.get('/', function(req, res){
    res.sendFile(path.join(__dirname, 'index.html'));
});

app.use(express.static(__dirname));

console.log('server running');


io.on('connection', function (socket) {
    console.log("connection");
    socket.on('new post', function(post){
        console.log(post);
        socket.emit('posted', post);
    }); 
});

server.listen(process.env.PORT || 3000);

client.js

$(function(){

    function submit(){
        socket.emit('new post', $("#text").val());
        console.log("submitted");   
    }

    function addPost(data){
        console.log(2);
        var $post = $('<p></p>').text(data);
        console.log($post);
        $("#posts").append($post);  
    }

    $("#submit").on("click", function(){
        submit();
    });

    socket.on('posted', function(data){
        console.log(1);
        addPost(data);  
    });
});

index.html

<html>
    <head>
        <title>title</title>
        <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    </head>

    <body>
    <input type="text" id="text">Input</input>
    <button id="submit">Submit</button>


    <script src="/client.js"></script>

    <br>
    <br>
    <br>

    <div id="posts"></div>
    <script>
        var socket = io();
    </script>
    </body>

</html>

對index.js的更改

  1. 定義express變量,以便可以重用。
  2. app.use(express.static(...)) app.get()之前定義app.get() ,以便確保將index.html與app.get()而不是從靜態位置提供。
  3. res.sendfile()更改為res.sendFile()`
  4. socket.emit("posted", data)更改為socket.emit("posted", post)
  5. 設置完所有其他內容后,將server.listen()移至結尾。
  6. express.static()調用中刪除path.join() ,因為那里不需要它。
  7. path.join()添加到res.sendFile()調用中,以確保路徑構建中的跨平台安全。

其中,我確定會導致錯誤的唯一一個是#4,其他都保持良好狀態。

對client.js的更改

沒有

對index.html的更改

將client.js的路徑更改為/client.js


如果此代碼在heroku上不起作用,則說明您沒有將文件放置在正確的目錄中,或者沒有正確配置heroku以使您的應用程序或socket.io正常工作。 如果您是我,我將首先驗證此代碼在您自己的本地計算機上是否有效,然后再在heroku上進行嘗試,以首先消除變量。

暫無
暫無

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

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