为Coffee.Script声明变量

时间:2015-04-22 20:29:58

标签: node.js coffeescript hubot

我是一个新的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声明为&#34; 11223344&#34;

这是宣布全局变量的适当方式吗?

# 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}"

1 个答案:

答案 0 :(得分:1)

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