【问题标题】:Using request to get API results, and integrating into Hubot response使用 request 获取 API 结果,并集成到 Hubot 响应中
【发布时间】:2015-09-06 16:00:33
【问题描述】:

我有一个 Hubot 插件,它侦听 JIRA webhook,并在创建新票证时在房间内宣布:

module.exports = (robot) ->
  robot.router.post '/hubot/tickets', (req, res) ->
    data = if req.body.payload? then JSON.parse req.body.payload else req.body
    if data.webhookEvent = 'jira:issue_created'
      console.dir("#{new Date()} New ticket created")
      shortened_summary = if data.issue.fields.summary.length >= 20 then data.issue.fields.summary.substring(0, 20) + ' ...' else data.issue.fields.summary
      shortened_description = if data.issue.fields.description.length >= 50 then data.issue.fields.description.substring(0, 50) + ' ...' else data.issue.fields.description
      console.log("New **#{data.issue.fields.priority.name.split ' ', 1}** created by #{data.user.name} (**#{data.issue.fields.customfield_10030.name}**) - #{shortened_summary} - #{shortened_description}")
      robot.messageRoom "glados-test", "New **#{data.issue.fields.priority.name.split ' ', 1}** | #{data.user.name} (**#{data.issue.fields.customfield_10030.name}**) | #{shortened_summary} | #{shortened_description}"
    res.send 'OK'

我想扩展它,对远程 API 执行查找 - 基本上,我想要查找额外的信息,然后添加到我传递给 room.messageRoom 的消息中。我正在使用请求,因为我需要摘要支持。

所以下面的 sn-p 可以自己正常工作。

request = require('request')

company_lookup = request.get('https://example.com/clients/api/project?name=FOOBAR', (error, response, body) ->
  contracts = JSON.parse(body)['contracts']
  console.log contracts
).auth('johnsmith', 'johnspassword', false)

这就是我的 JS/Node 新手出现的地方......哈哈。

我可以在回调中处理响应 - 但我真的确定如何在回调之外访问它?

我应该如何将它集成到 webhook 处理代码中 - 我是否只需将 sn-p 移动到 if 块中,并将其分配给一个变量?

【问题讨论】:

    标签: javascript node.js coffeescript requestjs


    【解决方案1】:

    我会使用中间件(假设您正在使用带有 Node.js 的 Express),因此您可以将 company_lookup 响应添加到 req 并将其用于添加中间件的任何路径。 http://expressjs.com/guide/using-middleware.html

    例如:

    server.js

    var middlewares = require('./middlewares');
    module.exports = function (robot) {
        // Tell the route to execute the middleware before continue
        return robot.router.post(middlewares.company_loop, '/hubot/tickets', function (req, res) {
            // Now in the req you have also the middleware response attached to req.contracts
            console.log(req.contracts);
            return res.send('OK');
        });
    };
    

    middlewares.js

    var request = require('request');
    // This is your middleware where you can attach your response to the req
    exports.company_lookup = function (req, res, next) {
        request.get('https://example.com/clients/api/project?name=FOOBAR', function (error, response, body) {
            var contracts;
            contracts = JSON.parse(body)['contracts'];
            // Add the response to req
            req.contracts = contracts;
            // Tell it to continue
            next();
        }).auth('johnsmith', 'johnspassword', false);
    };
    

    【讨论】:

      猜你喜欢
      • 2016-06-29
      • 1970-01-01
      • 2021-11-23
      • 2021-07-26
      • 1970-01-01
      • 2021-12-23
      • 2021-09-12
      • 2015-02-14
      • 2021-03-23
      相关资源
      最近更新 更多