Worker
-
In project root create
worker.js
:const conf = require('nconf') require('dm-sharedb-server/nconf') const path = require('path') // full path to workerActions.js and workerInit.js process.env['WORKER_ACTIONS_PATH'] = path.join(process.cwd(), './build/workerActions.js') process.env['WORKER_INIT_PATH'] = path.join(process.cwd(), './build/workerInit.js') const TaskDispatcher = require('dm-worker') const dispatcher = new TaskDispatcher() 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_INIT
instead ofmodule.exports
:import 'dm-sharedb-server/nconf' import ShareDB from 'sharedb' import richText from 'rich-text' import Racer from 'racer' import derbyAr from 'derby-ar' import ormEntities from './model' import shareDbHooks from 'sharedb-hooks' import hooks from './server/hooks' let init = global.DM_WORKER_INIT = function (backend) { // Register rich-text type in ShareDB ShareDB.types.register(richText.type) // Init ORM Racer.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_ACTIONS
instead ofmodule.exports
:let ACTIONS = 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
,workerActions
towebpack.config.js
ofdm-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