【问题标题】:Using Laravel Echo without Vue.js在没有 Vue.js 的情况下使用 Laravel Echo
【发布时间】:2017-09-10 11:26:05
【问题描述】:

我有一个使用 Laravel 5.4 构建的网站,我正在使用 Laravel Echo 和 Pusher 构建广播系统,但不幸的是,文档缺少指定在没有 Vue.js 的情况下使其工作所需的步骤。

有人使用此配置吗?我需要一个完整的分步指南,因为正确安装了 Echo(我更喜欢 CDN,但找不到)。

【问题讨论】:

  • 尝试使用socket.io而不是pusher。
  • cdn 链接在这里:cdnjs.com/libraries/laravel-echo>。无需使用 npm 安装

标签: laravel-5.4 pusher laravel-echo


【解决方案1】:

最后,我自己弄清楚了如何使用 Pusher 但不使用 Vue.js 来实现 Laravel Echo

  1. 按照找到的所有说明进行操作 here

  2. 假设你已经安装并配置了 Pusher,并通过 npm 安装了 Laravel Echo,请转到 your-project-folder/node_modules/laravel-echo/dist 并将 echo.js 复制到你的 Laravel 公共文件夹中(例如 your-project-folder/public/lib/js)。我使用 Grunt,所以我自动化了这个过程,只是为了简单起见。

  3. 在你的 Blade 模板中添加引用:

    <script type="text/javascript" src="{{asset('lib/js/echo.js')}}"></script>

  4. 在你的 Blade 模板的开头,在下面标记的地方,插入这行代码(只是为了避免直接使用 echo.js 出现 JS 错误):

    <script>
        window.Laravel = <?php echo json_encode([
            'csrfToken' => csrf_token(),
        ]); ?>;
        var module = { }; /*   <-----THIS LINE */
    </script>
    
  5. 在你的页脚中,包含所有 JS 文件后,这样调用 Laravel Echo:

    <script>
        window.Echo = new Echo({
            broadcaster: 'pusher',
            key: '{{env("PUSHER_KEY")}}',
            cluster: 'eu',
            encrypted: true,
            authEndpoint: '{{env("APP_URL")}}/broadcasting/auth'
        });
    </script>
    
  6. 如果您想收听某个频道,例如通知之一,你可以这样做:

    <script>
        window.Echo.private('App.User.{{Auth::user()->id}}')
            .notification((notification) => {
                doSomeAmazingStuff();
        });
    </script>
    

【讨论】:

  • 我得到了 pusher 和 module is not defined 错误。
  • 它给出了这个错误 Uncaught SyntaxError: Unexpected token 'export'
【解决方案2】:

我正在使用 laravel websockets,但我认为它应该与原始 Pusher 相同。 所以:

  1. 用 npm 安装 laravel-echo 和 pusher

  2. 转到 your-project-folder/node_modules/laravel-echo/dist 并复制 echo.jsyour-project-folder/public/js

  3. 转到 your-project-folder/node_modules/pusher-js/dist 并搜索 pusher.worker.js ,将其重命名为 pusher.js 并复制 your-project-folder/public/js

  4. 对新的 pusher.js 重命名在第一行代码的“var Pusher”之前添加“export”,如下所示:

export var Pusher =

或者你可以使用我的存储库https://github.com/HarenaGit/laravel-websockets-without-vuejs中的这个 echo.js 和 pusher.js 文件

  1. 到你想听变化的地方,你可以这样听

  <script type="module">

        import Echo from '{{asset('js/echo.js')}}'

        import {Pusher} from '{{asset('js/pusher.js')}}'

        window.Pusher = Pusher

        window.Echo = new Echo({
            broadcaster: 'pusher',
            key: 'server-notification-key',
            wsHost: window.location.hostname,
            wsPort: 6001,
            forceTLS: false,
            disableStats: true,
        });

        window.Echo.channel('your-channel')
        .listen('your-event-class', (e) => {
                console.log(e)
        })

        console.log("websokets in use")

</script> 

【讨论】:

    【解决方案3】:

    首先根据 laravel 文档创建广播数据的事件。并检查控制台调试您的数据是否被广播。如果您的数据正在广播,则使用 javascript 来监听推送文档中给出的数据。

    您可以在这里查看示例:https://pusher.com/docs/javascript_quick_start

    【讨论】:

    • 谢谢@NisargBhavsar,但你建议不要使用 Laravel Echo?
    • 即使我也面临同样的问题。但是我有两个不同的前端和后端域。所以我正在尝试按照我给你的答案来实施。
    猜你喜欢
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    相关资源
    最近更新 更多