Hubot Scripts与Asana集成

时间:2012-05-07 22:16:27

标签: api node.js coffeescript asana hubot

我正在制作我的第一个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并且它是正确的,但似乎帖子永远不会发生。

任何方向都会很棒!

感谢。

修改

经过一些调整之后,Dan继续朝着正确的方向迈出了一步,放弃.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 个答案:

答案 0 :(得分:1)

提交问题的答案,以便stackoverflow不会将其显示为未答复。

从OP中的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

答案 1 :(得分:0)

我认为Hubot中的http客户端需要query()的对象,而不是字符串。尝试直接传递对象而不是调用JSON.stringify