0

我正在尝试使用 Laravel 5.4 + Redis + Sockets + Echo 设置事件广播,但我遇到了问题。我跑过:

npm install --save laravel-echo

我将以下内容放在资源/资产/js/bootstrap.js 文件的底部:

import Echo from "laravel-echo"

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001'
});

然后我运行以下命令来编译所有内容:

npm run dev

我将编译后的 app.js 文件包含在头部并尝试像这样听:

<!DOCTYPE html> 
<html lang=en> 
<head> 
    <meta name="csrf-token" content="epkZXByjsW4lU6wwD2mELWe60Q26m3642lvMCoLK">
    <script src="http://localhost:3000/js/app.js"></script>
        </head> 
    <body>

        <h1>Chat</h1>

        <script src="//localhost:6001/socket.io/socket.io.js"></script>
        <script type="text/javascript">
            Echo.private('chat')
                .listen('MessageSentEvent', (e) => {
                    console.log(e.update);
                });
        </script>
</body>
</html>

在控制台中,我收到以下两个错误:

Uncaught TypeError: Cannot read property 'csrfToken' of undefined
    at Object.<anonymous> (bootstrap.js:24)
    at __webpack_require__ (bootstrap 2b5c37a…:19)
    at Object.<anonymous> (app.js:8)
    at __webpack_require__ (bootstrap 2b5c37a…:19)
    at Object.<anonymous> (module.js:22)
    at __webpack_require__ (bootstrap 2b5c37a…:19)
    at bootstrap 2b5c37a…:65
    at bootstrap 2b5c37a…:65
(anonymous) @ bootstrap.js:24
__webpack_require__ @ bootstrap 2b5c37a…:19
(anonymous) @ app.js:8
__webpack_require__ @ bootstrap 2b5c37a…:19
(anonymous) @ module.js:22
__webpack_require__ @ bootstrap 2b5c37a…:19
(anonymous) @ bootstrap 2b5c37a…:65
(anonymous) @ bootstrap 2b5c37a…:65
chat:36 Uncaught ReferenceError: Echo is not defined
    at chat:36

我究竟做错了什么?

4

2 回答 2

2

我认为这是因为您定义了window.Echo,而不是Echo

要访问它,请改为执行以下操作:

window.Echo.channel()....

在聊天第 36 行更改:

Echo.private('chat')
    .listen('MessageSentEvent', (e) => {
        console.log(e.update);
    });

对此:

window.Echo.private('chat')
    .listen('MessageSentEvent', (e) => {
        console.log(e.update);
    });

希望这能解决您的问题!

于 2017-06-01T02:52:10.833 回答
0

您没有提到您在控制台上收到该错误的事件。

这些可能会有所帮助:

https://github.com/tlaverdure/laravel-echo-server/issues/68 https://github.com/laravel/echo/issues/65

您似乎正在尝试创建一个聊天应用程序。我最近使用 Laravel 5.4 + Redis + Sockets + Echo 构建了这样的聊天应用程序:

https://github.com/xparthx/laravel-realtime-chat

一旦你检查了它,它将帮助你建立你自己的。

谢谢

于 2017-05-13T04:21:57.870 回答