因此,我正在尝试将任务发送到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
答案 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
。