2017-02-16 21 views
1

我是node.js的初學者。
當hubot聽到期望的消息,評估並執行腳本目錄中不存在的腳本時,我想這樣做。如何發送在腳本中找不到腳本dir的腳本中的msg?

我寫了下面的代碼,但是我不能發送味精。

錯誤味精

[Thu Feb 16 2017 20:22:34 GMT+0900 (JST)] ERROR ReferenceError: msg is not defined 

我應該在哪裏修復它定義味精?

hubot_dir /腳本/ load_test.coffee

path = require('path') 

module.exports = (robot) -> 
    robot.hear /loadscript/i, (msg) -> 
    script_name = "dynamictest.coffee" 
    script_dir = path.resolve(__dirname, "../dynamicscripts") 
    dynamictest = require(script_dir + "/" + script_name) 
    robot.loadFile(script_dir, script_name) 
    robot.emit "dynamic", { 
     robot: robot, 
     msg: msg 
    } 
    delete require.cache[script_dir + "/" + script_name] 

hubot_dir/dynamicscripts/dynamictest.coffee

module.exports = (robot) -> 
    robot.on "dynamic" , (dynamic) -> 
    robot.logger.info "output log" 
    msg.send "test" 

回答

0

當你調用robot.emit,你逝去的是包含變量的對象,你調用msg(儘管名稱完全是任意的)。這個對象作爲命名dynamic,因此參數傳遞,以引用msg,你需要把它稱爲dynamic.msg

module.exports = (robot) -> 
    robot.on "dynamic" , (dynamic) -> 
    robot.logger.info "output log" 
    dynamic.msg.send "test" 

我要指出,然而,與這樣你loadscript功能寫入,每次調用它時都會加載一個其他的dynamicscript.coffee實例。例如,您第一次撥打loadscript時,它會加載第二個文件併發回「測試」。第二次,它會再次加載第二個文件,並且您會得到兩個說'測試'的回覆。在第三次它會再次加載,你會收到三條消息,等等。