【问题标题】:Emitted value cannot be added to DIV express.js socket.io发出的值不能添加到 DIV express.js socket.io
【发布时间】:2016-05-10 19:59:35
【问题描述】:

我有以下 app.js

var express = require('express');
var app = express();
// var responseHandlerRouter = require('./routes/responseHandlerRouter.js');

routes = require('./routes');

var server = app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

io = require('/usr/local/lib/node_modules/socket.io').listen(server);

app.use('/', routes(io));

routes.js

var express = require('express');
var router = express.Router();

module.exports = function (io) {

    // all of this router's configurations

    router.get('/login', function (req, res, next) {
        io.emit('notification', 'news');
        res.end('well finally I am here');
    });

    return router;

}

index.html

<!doctype html>
<html>
    <head>
        <script src="http://127.0.0.1:3000/socket.io/socket.io.js"></script>
        <script>

        var socket = io.connect('http://localhost:3000/login');

        socket.on('notification', function (data) {
            console.log(data);
        });
        </script>
    </head>
    <body>
        <ul id='messages'></ul>
    </body>
</html>

当我获取 URL 时,它应该发出但它没有发生。它没有显示任何错误,但静默失败。

有什么问题吗?

更新

我想在 div 中显示“新闻”。 但我无法将其附加如下

   .... socket.on('notification', function (data) {
               $('#messages').html(data);
            });
            </script>
        </head>
        <body>
            <ul id='messages'></ul>
        </body>....

将使其有资格获得赏金

【问题讨论】:

  • 你真的用ajax请求/login吗?
  • 没有。我刚刚使用邮递员或通过浏览器访问 localhost:3000/login。
  • 你的html页面真的是登录页面吗?以便您请求/login 和login.html 呈现,如果是这样,套接字需要时间来连接
  • 不,这只是一个纯粹的测试,/login 只是我制作的测试路线。我只有这 3 个脚本,没有别的了。我想要做的是,当请求到达时,我需要对 DOM 进行更改。还有 socket.on('notification', function (data) { console.log(data); }); ,当我点击 /login url 时,console.log 没有显示任何值,尽管它出现在网络选项卡的框架中

标签: javascript html node.js sockets socket.io


【解决方案1】:

您似乎以错误的方式使用路由器。

不确定,但我认为 app.use('/login', routes(io)) 而不是你所拥有的应该可以解决问题。

在您的实现中,您的路由器仅接收到 '/' 的 GET

编辑:虽然接受了答案,但真正的解决方案在下面的 cmets 中(指定了错误的连接 url)

【讨论】:

  • 我可以解决这个问题。我在网络选项卡中获取值。但我无法提醒或将该值附加到 div
  • @MedetTleukabiluly 完成!请检查
  • @Ajeesh 你确定这段代码的逻辑没问题吗?您正在处理一个 http 请求,为什么不直接在响应中返回数据而不使用套接字?)
  • @MikhailDudin 我的用例不同。如果您看到我提出的这个问题,您就会知道我为什么要这样做 stackoverflow.com/questions/37129486/… 。我有一个 php 后端,它不能扩展长轮询,所以使用 websockets。请检查问题以清楚了解我要做什么
  • @Ajeesh 您可能错误地为您的套接字连接指定了错误的命名空间:“var socket = io.connect('localhost:3000/login');” - 尝试删除此表达式中的“/login”
猜你喜欢
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 2021-02-26
相关资源
最近更新 更多