module for working with socket.io with predefined rules. StrapIO will look at Role permission on each action. StrapIO is looking for all roles which have access to the given contenttype and action type.
UPDATE v2:
You need to subscribe first before you receive any data. socket.emit('subscribe', 'article') article is the content-type.
npm i strapioconfig/functions/bootstrap.js
process.nextTick(()=>{strapi.StrapIO=(require("strapio"))(strapi);});process.nextTick(()=>{strapi.StrapIO=(require("strapio"))(strapi,{path: "/other/path/",cors: {origin: "*",methods: ["GET","POST"]},});});api/<content-type>/controllers/<content-type>.js
module.exports={asynccreate(ctx){letentity;if(ctx.is("multipart")){const{ data, files }=parseMultipartData(ctx);entity=awaitstrapi.services.CONTENTTYPE.create(data,{ files });}else{entity=awaitstrapi.services.CONTENTTYPE.create(ctx.request.body);}strapi.StrapIO.emit(this,"create",entity);// or send custom eventstrapi.StrapIO.emitRaw("myroom","myevent",entity);returnsanitizeEntity(entity,{model: strapi.models.CONTENTTYPE});},asyncupdate(ctx){const{ id }=ctx.params;letentity;if(ctx.is("multipart")){const{ data, files }=parseMultipartData(ctx);entity=awaitstrapi.services.CONTENTTYPE.update({ id },data,{
files,});}else{entity=awaitstrapi.services.CONTENTTYPE.update({ id },ctx.request.body);}strapi.StrapIO.emit(this,"update",entity);returnsanitizeEntity(entity,{model: strapi.models.CONTENTTYPE});},};constio=require("socket.io-client");// Handshake required, token will be verified against strapiconstsocket=io.connect(API_URL,{query: { token },});socket.emit("subscribe","article");// article is the room which the client joinssocket.on("find",(data)=>{console.log("article:",data);//do something});socket.on("update",(data)=>{// do something});<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.2.0/socket.io.js"></script><script>// Handshake required, token will be verified against strapi(function(){constsocket=io("http://localhost:1337/",{path: "/sockettest/",query: {
token,},});socket.emit("subscribe","article");// article is the room which the client joinssocket.emit("subscribe","myroom");// custom roomsocket.on("find",(data)=>{//do something});socket.on("update",(data)=>{// do something});socket.on("myevent",(data)=>{});})();</script>DEBUG=strapio npm run developDEBUG=* npm run develop
Currently tested with:
{"strapi": "3.6.3","strapi-plugin-users-permissions": "3.6.3"}You can install strapio with a plugin npm i strapi-plugin-socket-io.
just do it over github or chat with me @Discord