node-horseman评估中的变量是未定义的

时间:2017-02-08 03:36:33

标签: javascript jquery node.js adonis.js node-horseman

我的应用程序有API端点,其中一个用于删除。唯一data-id由参数/feeds/:feedID传递,该参数访问Controller类,为Action类的变量feedID提供参数值。问题:变量feedID变为undefined实例内的horseman。代码:

控制器:访问端点时执行。它获取参数值并存储在Operation类的变量中以供进一步使用

* destroy(request, response) {
  const googleAlertsOperation = new GoogleAlertsOperation()

  googleAlertsOperation.feedID = request.param('feedID')
  ...

操作:使用新的feedID值,它应继续执行

* deleteRSSFeed() {
  var feedID = this.feedID //<-- Has the value passed from the Controller

  return new Promise((resolve, reject) => {
    horseman
      .userAgent(this.userAgent)
      .open('https://google.com/alerts')
      .evaluate(function() {
        try {
          return '#manage-alerts-div li[data-id="' + feedID + '"]' //<-- Undefined
        } catch(e) {
          reject(e)
        }
      }).then(function(data) {
        console.log(data)
      })
      .close()
  }).catch((err) => {
    this.addError(HTTPResponse.STATUS_INTERNAL_SERVER_ERROR, reject(err))

    return false
  })
}

我尝试了它而没有实例化新的Promise,但同样的问题。通过feedID传递this.feedID,而不是传递在顶部创建的变量undefined

1 个答案:

答案 0 :(得分:1)

我明白了。我必须按照documentation上的示例进行操作,并按照以下方式进行操作:

selector

注意参数function getAsDate(day, time) { var hours = Number(time.match(/^(\d+)/)[1]); var minutes = Number(time.match(/:(\d+)/)[1]); var AMPM = time.match(/\s(.*)$/)[1]; if(AMPM == "pm" && hours<12) hours = hours+12; if(AMPM == "am" && hours==12) hours = hours-12; var sHours = hours.toString(); var sMinutes = minutes.toString(); if(hours<10) sHours = "0" + sHours; if(minutes<10) sMinutes = "0" + sMinutes; time = sHours + ":" + sMinutes + ":00"; var d = new Date(day); var n = d.toISOString().substring(0,10); var newDate = new Date(n+"T"+time); return newDate; } 。就是这样。