使用thinkjs 作爲項目後臺,添加websocket希望推送一些實時消息,根據官網配置好後,發現我的需求是定時任務篩選數據推送給前臺,定時任務是個action寫在一個獨立的controller裏面,此action還調用了model裏面的一個公共方法,我想在model的公共方法裏面觸發emit方法,推送事件給前臺頁面,但是一直報emit is not a function
探索第一步:我將model的公共方法移到websocket.js 此controller裏面作爲一個action(因爲這個裏面的openAction 和closeAction是可以調用emit的)
探索第二步:如何在我的定時任務controller 的action裏面調用websocket.js裏面的action是個問題,通過查看官網,
const websocket = this.controller('websocket');//拿到controller
const data = await websocket.****Action(arg1,arg2);//一定要帶上Action,可以傳參
探索第三步:在websocket的action裏面觸發emit,不過發現,如果採取openAction裏面的this.emit觸發是無法找到emit的方法,又查看官網
先試了this.ctx.req.io,報錯,接着試了this.ctx.app.websocket.io 終於可行^_^!
到此實現推送消息到前臺的功能。消耗我快兩天時間o(╥﹏╥)o