我的事件在推进器上接收,如-
事件-API消息
详细信息-频道:私人聊天,事件:App\Events\MessageSent
但在我的Vue前端,Echo没有收到任何来自pusher的事件。
MessageSent.php
class MessageSent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user, Message $message)
{
$this->user = $user;
$this->message = $message;
}
/**
* Get the channels the event should broadcast on.
*
* @return IlluminateBroadcastingChannel|array
*/
public function broadcastOn()
{
return new PrivateChannel('chat');
}
}
聊天.vue
mounted() {
Echo.private("chat").listen("MessageSent", (e) => {
console.log("Received");
this.allMessages.push(e.message);
this.fetchMessages();
});
},
bootstrap.js
import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
forceTLS: true,
});
路线/通道.pp
Broadcast::channel('chat', function ($user) {
return auth()->check();
});
我还设置了广播驱动程序=pusher&我的.env文件中的所有推杆凭据
在MessageSent事件中执行此
public function broadcastOn()
{
Broadcast::routes(['middleware' => ['auth:api']]);
return new PrivateChannel('chat');
}
在BroadcastServiceProvider中添加以下行:
Broadcast::routes(['middleware' => ['auth:api']]);
我已经通过将以下代码从bootstrap.js放入app.js解决了这个问题
import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
forceTLS: true,
});
但我不知道为什么相同的代码在bootstrap.js 中不起作用