Worker
In project root create
worker.js:constconf=require('nconf')require('dm-sharedb-server/nconf')constpath=require('path')// full path to workerActions.js and workerInit.jsprocess.env['WORKER_ACTIONS_PATH']=path.join(process.cwd(),'./build/workerActions.js')process.env['WORKER_INIT_PATH']=path.join(process.cwd(),'./build/workerInit.js')constTaskDispatcher=require('dm-worker')constdispatcher=newTaskDispatcher()dispatcher.start().catch((err)=>{console.log('Error starting worker',err)})
In project root create
workerInit.js. Do any initializations here (plug in hooks, ORM, etc.). Since this file may be compiled by webpack, useglobal.DM_WORKER_INITinstead ofmodule.exports:import'dm-sharedb-server/nconf'importShareDBfrom'sharedb'importrichTextfrom'rich-text'importRacerfrom'racer'importderbyArfrom'derby-ar'importormEntitiesfrom'./model'importshareDbHooksfrom'sharedb-hooks'importhooksfrom'./server/hooks'letinit=global.DM_WORKER_INIT=function(backend){// Register rich-text type in ShareDBShareDB.types.register(richText.type)// Init ORMRacer.use(derbyAr)Racer.use(ormEntities)shareDbHooks(backend)hooks(backend)}
In project root create
workerActions.js. Put your tasks here (name of functions are the name of tasks). Since this file may be compiled by webpack, useglobal.DM_WORKER_ACTIONSinstead ofmodule.exports:letACTIONS=global.DM_WORKER_ACTIONS={}ACTIONS.test=function(model,task,done){console.log('>> Start test task',task.id)setTimeout(()=>{console.log('>> Finish test task',task.id)done()},5000)}
Add
worker,workerInit,workerActionstowebpack.config.jsofdm-react-webpack:module.exports={// ...backendApps: {server: path.join(__dirname,'server'),worker: path.join(__dirname,'worker'),workerActions: path.join(__dirname,'workerActions'),workerInit: path.join(__dirname,'workerInit')}// ... }
Copyright (c) 2019 Decision Mapper