Laravel Echo не получает данные от событий Pusher в приложении React JS

Я хотел бы отслеживать изменения в столбце «статус» в моей базе данных в режиме реального времени в моем приложении реагирования, поэтому я создал задание Laravel для обновления столбца. Поэтому я создал событие, которое будет транслироваться из серверной части во внешний, используя PUSHER-js ^8.4.0-rc2 и Laravel-echo ^1.16.1. Ларавел версия 9.2 Реагировать ^17.0.2

Я хотел бы прослушивать и получать обновления столбца «статус» из внутренней части во внешней части. Любые идеи?

Проблема: я почему-то не вижу во фронтенд-части данных, отправленных по каналу "job-status".

вот мой код:

мой файл .env:

`PUSHER_APP_ID=my_app_id
PUSHER_APP_KEY=my_app_key
PUSHER_APP_SECRET=my_app_secret
PUSHER_APP_CLUSTER=mt1

PUSHER_HOST=
PUSHER_PORT=443
PUSHER_SCHEME = "https"
BROADCAST_CONNECTION=pusher


MIX_PUSHER_APP_KEY = "${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER = "${PUSHER_APP_CLUSTER}"`

мой файл событий:

`class JobStatusUpdated implements ShouldBroadcast
{
    use Dispatchable;
    use InteractsWithSockets;
    use SerializesModels;

    public $status;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($status)
    {
        $this->status = $status;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        Log::channel('job-status')->info('Channel ');
        return new Channel('job-status');

    }

    public function broadcastWith()
    {
        return ['status' => $this->status];
    }

    public function broadcastAs()
    {
        return 'JobStatusUpdated';
    }
}
` 

Моя работа в Laravel:

` public function handle(
service $service)
    {

        try {
            $service->updateStatus($this->annotationId, 'processing');
            event(new JobStatusUpdated('processing'));

            $service->updateContent($this->annotationId);

            $service->updateStatus($this->annotationId, 'completed');
            event(new JobStatusUpdated('completed'));
        } catch (\Exception $e) {

            $this->failed($e);
            event(new JobStatusUpdated('failed'));
        }
    }`

мой файл laravel.log:

`[2024-04-19 09:30:31] local.INFO: Broadcasting [JobStatusUpdated] on channels [job-status] with payload:
{
    "status": "processing",
    "socket": null
}  
[2024-04-19 09:30:49] local.INFO: Broadcasting [JobStatusUpdated] on channels [job-status] with payload:
{
    "status": "completed",
    "socket": null
}  `

мой файл ресурса/js/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
});
`

мой файл React-js:

`const getSpeaker = (e, id) => {
        console.info("window.Echo", window.Echo)

        Pusher.logToConsole = true;
       Echo.channel(`job-status`)
            .listen('.JobStatusUpdated', (event) => {
                console.info('Received JobStatusUpdated event', event);
                console.info("e", event.payload)
            });
        console.info("window.Echo", window.Echo);
        Pusher.logToConsole = true;`

Я не вижу журнал после прослушивания события:

  console.info('Received JobStatusUpdated event', event); 

даже при этом вижу, что состояние толкателя подключено и имя канала установлено правильно и событие есть.

это результат console.info window.Echo :

connector: a
channels: {job-status: a}
eventFormatter: 
t {namespace: 'App.Events'}
name: "job-status"
pusher: ke
channels: Ft
channels: 
job-status: zt
callbacks: it
_callbacks: _JobStatusUpdated: Array(1)

это console.info пушера:

Pusher :  : ["Event sent",{"event":"pusher:subscribe","data":{"auth":"","channel":"job-status"}}]
Pusher :  : ["Event recd",{"event":"pusher_internal:subscription_succeeded","channel":"job-status","data":{}}]
Pusher :  : ["No callbacks on job-status for pusher:subscription_succeeded"]
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
101
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

pusher.subscribe('job-status'); channel.bind('your-event-name', function(data) { // Your Code logic });

я уже пробовал, но у меня все еще та же проблема

aliii 19.04.2024 17:18

Тогда вам следует попробовать Echo.private('yourChannelName').listen('YourEventName',(e) =>{ console.info(e) })

Naveed Amin 24.04.2024 10:31

решил проблему, спасибо, ты сделал мой день, братан. Также я добавил необходимую авторизацию в свой частный канал. и изменил Broadcast_driver=pusher в моем файле .env.

aliii 03.05.2024 14:41

Другие вопросы по теме