Laravel Echo导致帖子路线失败

时间:2017-08-10 18:41:55

标签: laravel pusher laravel-echo

当我在bootstrap.js中指定Laravel Echo时,该应用程序正常工作。

composer.json

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

的package.json

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

bootstrap.js

import Echo from 'laravel-echo';

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

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

broadcasting.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 post路线提交时,我无法收听任何事件(如果我通过Artisan控制台命令提交事件,它可以正常工作,我可以听取响应和将其输出到控制台。)

如果我在构造函数中dd('test'),则后期路由输出test。 如果我在broadcastOn方法中dd('test'),则后期路线不会点击此功能。

2 个答案:

答案 0 :(得分:0)

您可能需要在pusher-js之前导入laravel-echo

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

import Echo from 'laravel-echo';

答案 1 :(得分:0)

如果有人遇到类似问题,解决办法就是:不要使用Laravel Echo。

删除Echo,然后在主应用程序js之前直接拉入Pusher(https://js.pusher.com/4.1/pusher.min.js)。然后在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);
});