Realtime: أمثلة JavaScript لا تعمل معي

تم إنشاؤها على ٢٩ مايو ٢٠٢٠  ·  12تعليقات  ·  مصدر: supabase/realtime

مهلا،

أردت فقط إخبارك أنه يبدو أن هناك خطأ في أمثلة JS.
أحاول تشغيل هذا على خادم node.js. (لست خبيرًا في JS)
كتلة التعليمات البرمجية أدناه لا تعمل بالنسبة لي.

import { Socket } = '@supabase/realtime-js'

const REALTIME_URL = process.env.REALTIME_URL || 'http://localhost:4000'

var socket = new Socket(REALTIME_URL)
socket.connect()

// Listen to only INSERTS on the 'users' table in the 'public' schema
var allChanges = this.socket.channel('realtime:public:users')
  .join()
  .on('INSERT', payload => { console.log('Update received!', payload) })

ما يعمل بدلاً من ذلك هو ما يلي:

const { Socket } = require('@supabase/realtime-js'); // related to node/browser difference?

const REALTIME_URL = process.env.REALTIME_URL || 'http://localhost:4000/socket' // "/socket" had to be added

var socket = new Socket(REALTIME_URL) 
socket.connect()

var allChanges = socket.channel('realtime:public:users') // removed "this." here (related to node/browser difference?)
  .join()
  .channel // added ".channel" because "join()" returns Push object
  .on('INSERT', payload => { console.log('Record inserted!', payload) })

شكرا على lib العظيم :)

التعليق الأكثر فائدة

نعم خاصة في التفويض. نحن نعمل على ذلك الآن ، لذلك من الجيد الحصول على المزيد من وجهات النظر / المناهج.

شكرا للترويج هنا. إذا واجهتك مشكلة مع أي شيء آخر ، فأخبرنا بذلك. سأترك هذا ليغلق ما لم يكن لديك أي شيء متبقي

ال 12 كومينتر

يا retendo ! شكرا على المثابرة لفترة كافية لجعلها تعمل.

// related to node/browser difference?

لقد فعلتها. المثال في الجزء العلوي مخصص لـ "المتصفح" JS والمثال الموجود في الجزء السفلي مخصص لـ JS "الخادم".

كتاريخ قصير (غير دقيق تمامًا) لـ JS: في البداية ، تم استخدام Javascript فقط للقيام بأشياء صغيرة في المتصفح (رسوم متحركة صغيرة). ثم بدأ الناس في بناء مواقع ويب كاملة معها.

ثم فكرت Google .. ربما يمكننا تشغيل JS على خادم أيضًا ، وليس فقط في المتصفح؟ لذلك قاموا بإنشاء "مجموعة فرعية" من Javascript - nodejs ، وأنشأوا "محرك" يمكنه تشغيله يسمى v8 .

لكن NodeJS لا تمتلك نفس "اللهجة". (ابحث عن CommonJS vs AMD vs UMD.) هذا هو سبب وجود أدوات مثل babel. إنهم "يترجمون" JS بين لهجات JS المختلفة.

على أي حال - لقد قمت بتثبيته باستخدام require('@supabase/realtime-js'); للعقدة

إذا كان لديك مثال بسيط لطيف يعمل ، فربما يمكنك إضافته كمثال node-js في المجلد /examples ؟ نحن منفتحون جدًا على المساهمين.

أعتقد أن التغيير الأكثر أهمية يجب أن يكون ".channel" بين الانضمام () وعلى (...).
يبدو أن هذا لا علاقة له باختلافات node.js / المتصفح.
أم أن هذا يعمل بطريقة ما في المتصفح؟
يبدو أن .join () يقوم بإرجاع كائن Push بدلاً من قناة.

سآخذ للتحقق من هذا. هل لديك ريبو حالي يمكنني تفرع منه؟ إذا كانت هناك مشكلات خاصة ، فسأقوم بإنشاء عرض توضيحي سريع صغير في هذا الريبو

حصلت على بعض الأمثلة على الكود هنا:
https://gist.github.com/retendo/3e2ddb90a29dfd0f5a2ab81729c7ed29

هذا يعمل مع نموذج التعليمات البرمجية المعدلة

بالإضافة إلى أن مسارات wildcart تعمل على مسار القناة.
socket.channel ('realtime: public: users') -> يعمل
socket.channel (' ') -> مكسورةsocket.channel ("الوقت الحقيقي: ") -> مكسور
socket.channel ('realtime: public: *') -> معطل

يعمل socket.channel ("realtime: public") ، بالرغم من ذلك. فقط حذف القولون الأخير.

مرحبًا retendo آسفًا

لمعلوماتك: هذه لا ينبغي أن تعمل

socket.channel('') -> broken
socket.channel('realtime:') -> broken
socket.channel('realtime:public:*') -> broken (see realtime:public below)

لكن هذه يجب

socket.channel('realtime:*') -> listen to changes in the database
socket.channel('realtime:public') -> listen to changes in the public schema
socket.channel('realtime:public:users') -> listen to changes in the users table

استخدم "تشغيل" للاستماع إلى "أنواع أحداث" مختلفة. باستخدام الكود في جوهرك:

// INSERTS
socket.channel('realtime:public')
  .join()
  .channel
  .on('INSERT', payload => {});

// UPDATES
socket.channel('realtime:public')
  .join()
  .channel
  .on('UPDATE', payload => {});

// DELETES
socket.channel('realtime:public')
  .join()
  .channel
  .on('DELETE', payload => {});

// ALL 
socket.channel('realtime:public')
  .join()
  .channel
  .on('*', payload => {});

أتمنى أن يساعد ذلك قليلا! لم أختبر الكود الخاص بك حتى الآن ولكنه يبدو رائعًا! أرى بالضبط إلى أين أنت ذاهب معها - إنشاء وكيل (ربما لأغراض المصادقة؟)

للمصادقة ، واجهات برمجة تطبيقات مأخذ التوصيل المتخصصة التي تخفي بنية قاعدة البيانات الأساسية وبعض تعديلات الحمولة.

مثال صغير تم دفعه من أجلكretendo. لقد استخدمت الكود الخاص بك كخط أساس لذا نشكرك على المساهمة

أعتقد أن التغيير الأكثر أهمية يجب أن يكون ".channel" بين الانضمام () وعلى (...).

تحقق من الفرق بين الالتزام الأول والثاني: https://github.com/supabase/realtime/commit/d4c9eced516518f26d0174cc86508dc9530d0738

يُرجع socket.channel() القناة ، ويعيد socket.channel.join() حدث الانضمام. لذلك كنت "تدخل" إلى القناة من خلال الحدث join .

الرجاء إبقائي على تحديث على الوكيل الخاص بك - إذا كان بإمكانك الاحتفاظ به بشكل عام بما يكفي ، فسأضيفه إلى المجلد examples .

منطقي. في المثال الأصلي المستند إلى المتصفح ، تم ربطها جميعًا ببعضها البعض ، لذلك حاولت تكرارها بهذه الطريقة. لكن التغييرات في الالتزام الثاني تجعل الأمر أكثر وضوحًا في الواقع.

فيما يتعلق بمثال الوكيل: سأرى ما يمكنني فعله. ربما تكون مهتمًا أكثر بكيفية ملاءمة المصادقة في الصورة ، أليس كذلك؟ لأن الأشياء الأخرى التي ذكرتها يجب أن تكون مباشرة.

نعم خاصة في التفويض. نحن نعمل على ذلك الآن ، لذلك من الجيد الحصول على المزيد من وجهات النظر / المناهج.

شكرا للترويج هنا. إذا واجهتك مشكلة مع أي شيء آخر ، فأخبرنا بذلك. سأترك هذا ليغلق ما لم يكن لديك أي شيء متبقي

الإغلاق الآن ، لا تتردد في إعادة الفتح في أي مرحلة

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات