我是一个新的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}"
答案 0 :(得分:1)
您有HUBOT_UPTIMEROBOT_APIKEY="11223344"
,但实际上并没有使用它,因为您还有apiKey = process.env.HUBOT_UPTIMEROBOT_APIKEY
。这试图将其从环境中拉出来。我假设您从未设置任何环境变量,因此应该是未定义的。见https://nodejs.org/api/process.html#process_process_env