2012-05-07 86 views
1

我正在製作我的第一個Hubot腳本,它將向Asana添加一項快速任務。
我並沒有看着做任何事情太瘋狂,或至少不認爲我是。Hubot與Asana集成的腳本

目前我有

url = 'https://app.asana.com/api/1.0' 

WORKSPACE = "1111111111111" 
user = "xxxxxx.xxxxxxxxxxxxxxxx" 
pass = "" 

module.exports = (robot) -> 
    robot.respond /task (.*)/i, (msg) -> 
    params = {name: "#{msg.match[1]}", workspace: "#{WORKSPACE}"} 
    stringParams = JSON.stringify params 
    auth = 'Basic ' + new Buffer("#{user}:#{pass}").toString('base64') 
    msg.http("#{url}/tasks") 
     .headers("Authorization": auth, "Content-Length": stringParams.length, "Accept": "application/json") 
     .query(params) 
     .post() (err, res, body) -> 
     console.log(err) 
     console.log(res) 
     console.log(body) 
     msg.send body 

我真正想要做的是,它的發佈到工作區輸出。我知道還有更多的Asana API讓它一切正常,但看着我的日誌的尾巴,沒有什麼是輸出,沒有任何東西正在記錄到控制檯,什麼都沒有發生。

如果我在params下做了一個console.log,它會輸出JSON並且它是正確的,但是好像這個帖子永遠不會發生。

任何方向都會很棒!

謝謝。

EDIT

一些更多的調整後,以下丹在正確方向邁出的一步,滴.query(),並把該字符串在.POST()的輸出是最後正確的。

module.exports = (robot) -> 
    robot.respond /task (.*)/i, (msg) -> 
    params = {data:{name: "#{msg.match[1]}", workspace: "#{WORKSPACE}"}} 
    stringParams = JSON.stringify params 
    auth = 'Basic ' + new Buffer("#{user}:#{pass}").toString('base64') 
    msg.http("#{url}/tasks") 
     .headers("Authorization": auth, "Content-Length": stringParams.length, "Accept": "application/json") 
     .post(stringParams) (err, res, body) -> 
     console.log(err) 
     console.log(res) 
     console.log(body) 
     msg.send body 
+2

不要忘記它必須位於頂級對象的'data'參數中。 '{data:{parameters:values}}' – DanRedux

+0

謝謝@DanRedux,我給了他一個鏡頭,但沒有任何改變。 : -/ – LostInQuery

+0

經過一番調整後,終於找到了答案。感謝指針! – LostInQuery

回答

1

提交問題的答案,以便stackoverflow不會顯示爲未答覆。

從OP中的編輯複製。

刪除.query()並將該字符串放在.post()中,輸出最終是正確的。

module.exports = (robot) -> 
    robot.respond /task (.*)/i, (msg) -> 
    params = {data:{name: "#{msg.match[1]}", workspace: "#{WORKSPACE}"}} 
    stringParams = JSON.stringify params 
    auth = 'Basic ' + new Buffer("#{user}:#{pass}").toString('base64') 
    msg.http("#{url}/tasks") 
     .headers("Authorization": auth, "Content-Length": stringParams.length, "Accept": "application/json") 
     .post(stringParams) (err, res, body) -> 
     console.log(err) 
     console.log(res) 
     console.log(body) 
     msg.send body 
0

我認爲Hubot的http客戶端期望一個對象爲query(),而不是一個字符串。嘗試直接傳入對象,而不是調用JSON.stringify

+0

它正在調用該對象。 – LostInQuery