当前位置: 首页 > 知识库问答 >
问题:

socket.io没有响应,Node.js

马晓博
2023-03-14

我要把我的代码移到服务器上。这段代码可以在我在localhost上设置的自己的服务器上完美地运行和呈现数据库信息,但是当我从服务器上运行代码时,index.html中会显示一个错误,说明“IO没有定义”。无论出于什么原因,socket.io都无法被识别。此外,如果我在浏览器中键入localhost:3000,则不会显示任何内容。任何帮助都将不胜感激。

我有两个文件,server.js和index.html。

    var mysql = require('mysql')
    var io = require('socket.io').listen(3000)
    var db = mysql.createConnection({
    host: '127.0.0.1', // Important to connect to localhost after connecting via ssh in screen
    user: 'username',
    password: '12345',
    database: '12345',
    port: 3306
})


// Log any errors connected to the db
db.connect(function(err){
    if (err) console.log(err)
})


// Define/initialize our global vars
var notes = []
var isInitNotes = false
var socketCount = 0



//Socket.io code below

io.sockets.on('connection', function(socket){
    // Socket has connected, increase socket count
    socketCount++
    // Let all sockets know how many are connected

    io.sockets.emit('users connected', socketCount)

    socket.on('disconnect', function() {
        // Decrease the socket count on a disconnect, emit
        socketCount--
        io.sockets.emit('users connected', socketCount)
    })
    socket.on('new note', function(data){

        // New note added, push to all sockets and insert into db
        notes.push(data)
        io.sockets.emit('new note', data)
        // Use node's db injection format to filter incoming data
        db.query('INSERT INTO notes (note) VALUES (?)', data.note)
    })
 console.log("10");

    // Check to see if initial query/notes are set
    if (! isInitNotes) {
        // Initial app start, run db query
        db.query('SELECT * FROM `Users`')
            .on('result', function(data){
                // Push results onto the notes array
                //console.log(notes);
                notes.push(data)
            })
            .on('end', function(){
                // Only emit notes after query has been completed
                socket.emit('initial notes', notes)
            })

        isInitNotes = true
    } else {
        // Initial notes already exist, send out
        socket.emit('initial notes', notes)
    }

})
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

    <!-- Script below works with my server I set up on local host
    <script src="http://localhost:3000/socket.io/socket.io.js"></script>-->

    <!-- script below properly links to the socket.io.js file in my directory, and throws no errors-->
    <script type= "node_modules/socket.io/node_modules/socket.io-client/socket.io.js"></script>

        <script>
        $(document).ready(function(){
            var socket = io.connect('http://localhost:3000'); //LINE OF CODE IN QUESTION




        //Code below not really relevant to problem, but still part of my project.

        socket.on('initial notes', function(data){
            var html = ''
            for (var i = 0; i < data.length; i++){
                // We store html as a var then add to DOM after for efficiency
                html += '<li>' + data[i].Name + '</li>'
            }
            $('#notes').html(html)
        })

        // New note emitted, add it to our list of current notes
        socket.on('new note', function(data){
            $('#notes').append('<li>' + data.Name + '</li>')
        })

        // New socket connected, display new count on page
        socket.on('users connected', function(data){
            $('#usersConnected').html('Users connected: ' + data)
        })

        // Add a new (random) note, emit to server to let others know
        $('#newNote').click(function(){
            var newNote = 'This is a random ' + (Math.floor(Math.random() * 100) + 1)  + ' note'
            socket.emit('new note', {note: newNote})
        })
    })
    </script>
    <ul id="notes"></ul>
    <div id="usersConnected"></div>
    <div id="newNote">Create a new note:</div

解决了!

想通了。我使用“script src=”my servers ip address:3000/socket.io/socket.io.js“,然后将变量socket更改为var socket=io.connect('servers ip address:3000');因此,答案是将localhost全部删除。

共有1个答案

狄令
2023-03-14

我相信如果从服务器加载socket.io在本地工作可能会出现问题(可能是权限问题?),请尝试从socket.io CDN加载它进行测试

<script src="http://cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script>
 类似资料:
  • 问题内容: 我要做什么? 单击时,将执行。在方法内部,我将方法的每个索引传递给方法,以便可以在中显示它。 发生了什么 ? 如果我 不 守行作为 注释 ,在我的方法,则是 按预期工作 。尽管如果我将 其注释掉 ,则 停止响应 。 难道我做错了什么 ? Java版本: 这是我正在使用的代码: *编辑1:* 按照建议,如果我添加,它确实可以工作,但是会抛出如下所示的错误。这样就可以了。但这是 合法 的表

  • 昨天工作正常,一夜之间Windows7重新启动,现在Eclipse不会完成加载--旋转器显示“Eclipse SDK(未响应)”对话框“用户操作正在等待”完成“构建工作区”。Android SDK内容加载器保持在0%我尝试过: eclipse-clean delete c:\program files\eclipse\configuration.settings\org.eclipse.ui.id

  • 我用IntelliJ创建了一个非常简单的流测试。 IntelliJ无法完成测试,并给了我错误 这导致假设响应程序流不执行任何操作。 启动器流被执行。我可以看到这一点,因为命令显示在日志中。但是,我不知道响应器流是否从未由发起方流启动,或者只是没有响应。也许你可以帮我。 谢谢

  • 我是一个全新的计算机编程为CIS210和它的一个可怕的开始。下载了JDK9和Netbeans 8.2。Netbeans不允许我打开新项目或文件。没有错误消息或任何东西,几乎就像我没有点击它。屏幕保持空白,如下面的链接所示。快把我逼疯了。 单击“新建项目”时屏幕为空白:

  • 我使用Jmeter对一个包括web套接字连接的应用程序进行负载测试。 当尝试使用单读取采样器读取帧中的数据时,得到错误响应代码:无响应响应消息:读取超时,未收到响应。 有人能帮我解决这个问题吗? 线程名称:密苏里州TestEnv 1-1样例开始时间:2019-10-09 10:40:43 IST加载时间:1000连接时间:0延迟时间:0大小以字节为单位:0发送字节:0头大小以字节为单位:0主体大小

  • 我是一个ameatur编码器,我最近开始使用pyplay,我一直在编码一些例子,我刚刚找到一个执行时无法正常加载的例子。我很确定我写对了,但我不知道为什么它不会运行。我运行Python 3.6和Pygame1.9.3。** *我知道pygame的版本是1.9,但我不知道最后一个数字。 这是代码: