当到达工人时,有效载荷变得不确定

时间:2019-04-05 21:09:12

标签: node.js google-app-engine httprequest adonis.js google-cloud-tasks

因此,我正在尝试将任务发送到Google云任务队列,但是当它到达那里时,它变得不确定。这是我的代码的快照。我在做什么错了?

我正在使用node.js和框架Adonis.js进行此操作。有效负载由带有用户信息的对象组成。诸如:{first_name:'Bla',last_name:'Bla bla',email:'bla@bla.com'}等。我已经完成了以前确实可以工作的任务,但是我找不到那个错误……所以,我的代码片段如下:

这是我创建任务的地方:

edX.org

这是我的任务类(就像Cloud Tasks文档btw一样):

const payload = { users }
    const http = {
      method: 'PUT',
      endpoint: '/api/task/users',
      headers: {
        Authorization: request.header('Authorization')
      }
    }

    const task = new Task('users', http, payload)

    try {
      await task.createTask()
    } catch (e) {
      console.log(e)
      return response.status(500).send({ message: 'Users task: Internal Error!' })
    }

这是将接受任务的工人:

constructor (queue, http, payload = undefined, seconds = undefined) {
    const project = Config.get('google.projectId')
    const location = Config.get('google.location')

    this._client = new cloudTasks.CloudTasksClient()
    console.log(project, location, queue)
    this._parent = this._client.queuePath(project, location, queue)
    this._payload = payload
    this._http = http
    this._seconds = seconds
  }

  async createTask() {
    const task = {
      appEngineHttpRequest: {
        httpMethod: this._http.method,
        relativeUri: this._http.endpoint,
        headers: this._http.headers
      },
    }

    if (this._payload !== undefined) {
      task.appEngineHttpRequest.body = Buffer.from(JSON.stringify(this._payload)).toString('base64')
    }

    if (this._seconds !== undefined) {
      task.scheduleTime = {
        seconds: this._seconds + Date.now() / 1000
      }
    }

    const request = {
      parent: this._parent,
      task: task
    }

    console.log(`Sending task: ${task}`)
    const [ res ] = await this._client.createTask(request)
    console.log(`Created task ${res.name}`)
  }

我期望在到达工作人员之前描述的对象相同,但是我只能得到“未定义”的值。你们能帮我吗?谢谢! :D

1 个答案:

答案 0 :(得分:1)

这可能是由于解析传入的请求正文。默认情况下,任务请求的Content-Type标头设置为“应用程序/八位字节流”(https://cloud.google.com/tasks/docs/reference/rest/v2beta3/projects.locations.queues.tasks#AppEngineHttpRequest)。

因此,您可能需要将解析器设置为适当的解析类型(https://github.com/googleapis/nodejs-tasks/blob/master/samples/server.js#L27)或手动设置Content-Type