0

当我没有在bootstrap.js.

作曲家.json

"require": {
    "laravel/framework": "5.4.*",
    "pusher/pusher-php-server": "~2.6",
},

包.json

"dependencies": {
    "laravel-echo": "^1.3.2",
    "pusher-js": "^4.1.0",
}

引导程序.js

import Echo from 'laravel-echo';

window.Pusher = require('pusher-js');

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'app-key',
    cluster: 'eu',
    encrypted: true
});

广播.php

'pusher' => [
    'driver' => 'pusher',
    'key' => env('PUSHER_APP_KEY'),
    'secret' => env('PUSHER_APP_SECRET'),
    'app_id' => env('PUSHER_APP_ID'),
    'options' => [
        'cluster' => 'eu',
        'encrypted' => true
    ],
],

我在我的本地主机上,并尝试了多个教程和许多变体,但没有一个能解决问题。应用程序正确加载了所有 get api 路由,但是当我尝试登录时出现 500 错误。

我也在使用 Vue 和 VueRouter,以防有任何影响。

编辑

似乎有东西干扰了用 axios 发送的 CsrfToken。如果我重新排列我的 bootstrap.js 文件,以便在 axios 之前导入 Echo:

import Echo from 'laravel-echo';
etc.

window.axios = require('axios');

发布路线完美无缺,但是当我通过 axios 发布路线提交它们时,我无法收听任何事件(如果我通过 Artisan 控制台命令提交事件,它工作正常,我可以收听响应并将其输出到控制台)。

如果我dd('test')在事件构造函数中,后路由输出test. 如果我dd('test')在 broadcastOn 方法中,post 路由不会命中这个函数。

4

2 回答 2

0

您可能需要先pusher-js导入laravel-echo.

window.Pusher = require('pusher-js');

import Echo from 'laravel-echo';
于 2017-08-10T20:25:50.983 回答
0

如果有人遇到类似问题,解决方案:不要使用 Laravel Echo。

删除 Echo 并直接在https://js.pusher.com/4.1/pusher.min.js主应用程序 js 之前拉入 Pusher ( )。然后在bootstrap.js文件的底部:

window.Pusher = new Pusher('app-key', {
    cluster: 'your-cluster',
    encrypted: (true/false),
    auth: {
        headers: {
            'X-CSRF-Token': token.content
        }
    }
});

现在您可以执行类似以下的操作:

var channel = Pusher.subscribe('channel-name');
channel.bind('broadcast-event-name', function(data) {
    console.log(data);
});
于 2017-08-13T09:39:11.063 回答