2015-04-22 146 views
0

我是一个新的Hubot/Node.js/CoffeeScript用户。声明变量Coffee.Script

我正在查看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 /脚本) 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: 
# [email protected] 

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

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

+0

完全有道理,但是......我在Hubot讨论中的任何地方都看不到此过程。我只是创建这个文件来声明全局变量? – boostn

+0

您可能需要做一些不同的事情,如果你没有使用bash shell – Transcendence