0

我是新的 Hubot/Node.js/CoffeeScript 用户。

我正在查看 Hubot 的 UptimeRobot 脚本。当我将它包含在我的包中时,我收到了错误:

ERROR Error loading scripts from npm package - Error: Uptime Robot API Key must be provided
  at Client (/home/myhubot/node_modules/uptime-robot/index.js:11:11)
  at Robot.loadExternalScripts (/home/myhubot/node_modules/hubot/src/robot.coffee:263:11, <js>:212:39)
  at /home/myhubot/node_modules/hubot/bin/hubot:119:11, <js>:123:26
  at fs.js:268:14
  at Object.oncomplete (fs.js:107:15)

这是默认的 UptimeRobot.Coffee 文件(位于 /home/myhubot/scripts)http://pastebin.com/aeDgZu0B

例如,我已将 HUBOT_UPTIMEROBOT_APIKEY 声明为“11223344”

这是声明全局变量的适当方式吗?

# Description
#   A hubot script to list/add monitors for the Uptime Robot service.
#
# Configuration:
#   HUBOT_UPTIMEROBOT_APIKEY
#   HUBOT_UPTIMEROBOT_CONTACT_ID (optional)
#
# Commands:
#   hubot uptime <filter> - Returns uptime for sites.
#   hubot uptime add-check <http://example.com> [as <friendlyname>]- Adds a new uptime check.
#
# Author:
#   patcon@myplanetdigital

HUBOT_UPTIMEROBOT_APIKEY="11223344"

apiKey = process.env.HUBOT_UPTIMEROBOT_APIKEY
alertContactId = process.env.HUBOT_UPTIMEROBOT_CONTACT_ID

module.exports = (robot) ->

  REGEX = ///
    uptime
    (       # 1)
      \s+   #    whitespace
      (.*)  # 2) filter
    )?
  ///i
  robot.respond REGEX, (msg) ->
    Client = require 'uptime-robot'
    client = new Client apiKey

    filter = msg.match[2]
    data = {}

    client.getMonitors data, (err, res) ->
      if err
        throw err

      monitors = res

      if filter
        query = require 'array-query'
        monitors = query('friendlyname')
          .regex(new RegExp filter, 'i')
          .on res

      for monitor, i in monitors
        name   = monitor.friendlyname
        url    = monitor.url
        uptime = monitor.alltimeuptimeratio
        status = switch monitor.status
          when "0" then "paused"
          when "1" then "not checked yet"
          when "2" then "up"
          when "8" then "seems down"
          when "9" then "down"

        msg.send "#{status.toUpperCase()} <- #{url} (#{uptime}% uptime)"

  robot.respond /uptime add-check (\S+)( as (.*))?$/i, (msg) ->
    url = require('url').parse(msg.match[1])
    friendlyName = msg.match[3] or url.href

    # Check that url format is correct.
    monitorUrl = url.href if url.protocol

    # Create monitor
    msg.http("http://api.uptimerobot.com/newMonitor")
      .query({
        apiKey: apiKey
        monitorFriendlyName: friendlyName
        monitorURL: monitorUrl
        monitorType: 1
        format: "json"
        noJsonCallback: 1
        monitorAlertContacts: [
          alertContactId
        ]
      })
      .get() (err, res, body) ->
        response = JSON.parse(body)

        if response.stat is "ok"
          msg.send "done"

        if response.stat is "fail"
          msg.send "#{response.message}"
4

1 回答 1

1

你有HUBOT_UPTIMEROBOT_APIKEY="11223344",但你实际上并没有使用它,因为你也有apiKey = process.env.HUBOT_UPTIMEROBOT_APIKEY. 这试图将其从环境中拉出来。我假设您从未设置任何环境变量,因此应该未定义。见https://nodejs.org/api/process.html#process_process_env

于 2015-04-22T20:37:38.597 回答