Javascript 调用Google云打印API时未读取请求参数

Javascript 调用Google云打印API时未读取请求参数,javascript,node.js,request,google-cloud-platform,Javascript,Node.js,Request,Google Cloud Platform,我正在尝试使用谷歌云打印API。我以前在发送请求时遇到过问题。经过一些json/字符串化实验后,我再也看不到那个错误了。相反,根据GoogleAPI返回的响应,我的API调用不成功。以下是我正在做的: // Ticket used for google cloud printing const ticket = { "version":"1.0", "print":{ "color":{"vendor_id":"psk:Color","type":0}, "du

我正在尝试使用谷歌云打印API。我以前在发送请求时遇到过问题。经过一些json/字符串化实验后,我再也看不到那个错误了。相反,根据GoogleAPI返回的响应,我的API调用不成功。以下是我正在做的:

// Ticket used for google cloud printing
const ticket = {
  "version":"1.0",
   "print":{
      "color":{"vendor_id":"psk:Color","type":0},
      "duplex":{"type":0},
      "page_orientation":{"type":0},
      "copies":{"copies":1},
      "dpi":{"horizontal_dpi":1200,"vertical_dpi":1200},
      "media_size":{"width_microns":80000,"height_microns":58000,"is_continuous_feed":false},
      "collate":{"collate":true},
      "vendor_ticket_item":[
          //Printer specific settings here, from the capabilities:
          {"id":"psk:JobInputBin","value":"ns0000:Tray3"},
          {"id":"psk:PageICMRenderingIntent","value":"psk:Photographs"},
          {"id":"psk:PageMediaType","value":"ns0000:Auto"},
          {"id":"psk:JobOutputBin","value":"ns0000:Auto"},
          //etc.
      ]
    }
  }

request({
  "method": "POST",
  "content-type" : "application/json",
  "url": googlePrintUrl + "submit",
  "headers": {
    "Authorization": "OAuth " + googleAccessToken
  },
  "body" : {
    "printerid": "39875g133-ae7d-76hg-65af-jhe5bc682404",
    "ticket": JSON.stringify(ticket),
    "title": "TEST PRINT",
    "content": "test msg",
    "contentType": "text/plain"
  },
  "json": true
}, function (error, res, body){
  if (error) {
    console.log("There was an error with Google Cloud Print");
    console.log(error);
    return;
  }
  console.log("The server responded with:", body);
}); 
此请求导致来自服务器的以下响应:

The server responded with: { success: false,
  request: 
   { time: '0',
     params: {},
     user: 'mytest@gmail.com',
     users: [ 'mytest@gmail.com' ] },
  errorCode: 3,
  message: 'Printer Id required for this request.' }
如您所见,
params
字段为空。这很奇怪,因为当我使用Postman执行相同的请求时,这个字段填充了我在API调用中发送的参数。以下是我在《邮递员》中成功做到的:

它生成了服务器响应:

{
 "success": true,
 "request": {
  "time": "0",
  "params": {
   "ticket": [
    "{\"version\":\"1.0\",\"print\":{\"color\":{\"vendor_id\":\"psk:Color\",\"type\":0},\"duplex\":{\"type\":0},\"page_orientation\":{\"type\":0},\"copies\":{\"copies\":1},\"dpi\":{\"horizontal_dpi\":600,\"vertical_dpi\":600},\"media_size\":{\"width_microns\":80000,\"height_microns\":58000,\"is_continuous_feed\":false},\"collate\":{\"collate\":true},\"vendor_ticket_item\":[{\"id\":\"psk:JobInputBin\",\"value\":\"ns0000:Tray3\"},{\"id\":\"psk:PageICMRenderingIntent\",\"value\":\"psk:Photographs\"},{\"id\":\"psk:PageMediaType\",\"value\":\"ns0000:Auto\"},{\"id\":\"psk:JobOutputBin\",\"value\":\"ns0000:Auto\"}]}}"
   ],
   "printerid": [
    "39875g133-ae7d-76hg-65af-jhe5bc682404"
   ],
   "title": [
    "TEST"
   ],
   "contentType": [
    "text/plain"
   ],
   "content": [
    "**** test"
   ]
  },
  "user": "mytest@gmail.com",
  "users": [
   "mytest@gmail.com"
  ]
 },
 "xsrf_token": "AIp06DhAZRSLW9GlHWQLKykbpU-5fYRqcA:1531484990909",
 "message": "Print job added.",
 "job": {
  "ticketUrl": "https://www.google.com/cloudprint/ticket?jobid\u003df11043fe-3e00-d912-11dd-c859718a5575",
  "printerName": "",
  "errorCode": "",
  "updateTime": "1531484993830",
  "title": "**** TEST",
  "message": "",
  "ownerId": "mytest@gmail.com",
  "tags": [
   "^own"
  ],
  "uiState": {
   "summary": "QUEUED",
   "progress": "Delivery attempts: 1"
  },
  "numberOfPages": 1,
  "createTime": "1531484991068",
  "semanticState": {
   "delivery_attempts": 1,
   "state": {
    "type": "QUEUED"
   },
   "version": "1.0"
  },
  "printerid": "39875g133-ae7d-76hg-65af-jhe5bc682404",
  "fileUrl": "https://www.google.com/cloudprint/download?id\u003df11043fe-3e00-d912-11dd-c859718a5575",
  "id": "f11043fe-3e00-d912-11dd-c859718a5575",
  "rasterUrl": "https://www.google.com/cloudprint/download?id\u003df11043fe-3e00-d912-11dd-c859718a5575\u0026forcepwg\u003d1",
  "contentType": "application/pdf",
  "status": "QUEUED"
 }
}
这是一个成功的打印作业,我发送的所有参数都会在响应对象中发回

那么,我的node.js代码哪里出错了?

邮递员在
formData
中发送有效负载(printerid、内容、标题等),而不是
正文

在“发送”按钮下面是一个按钮“代码”,它可以生成功能节点(和其他)代码片段,如

var request = require("request");

var options = { method: 'POST',
  url: 'https://www.google.com/cloudprint/submit',
  headers: 
   { 'cache-control': 'no-cache',
     Connection: 'keep-alive',
     'Content-Length': '769',
     'Accept-Encoding': 'gzip, deflate',
     Host: 'www.google.com',
     'Cache-Control': 'no-cache',
     'Content-Type': 'application/json',
     Authorization: 'Bearer ya29.GlxWB5_vr8QmJw3DChvVyqpRhNJ2hsuVzwNTJoYRH6r2VVGTwDE3MLNAN8pjTB3-BDWtZeIDrCDcP5DwYGywM1vgb9VMPhoi806HrMpOpKAaKzrgiliojec6IB2Cwg',
     'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' },
  formData: 
   { printerid: 'd936d368-7ea4-6f66-84fd-6d5a7a357318',
     title: 'Document Title',
     content: 'Hello World',
     ticket: '{"version":"1.0","print":{"vendor_ticket_item":[],"color":{"type":"STANDARD_MONOCHROME"},"copies":{"copies":1}}}',
     contentType: 'text/plain' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});

嗨,Sahand,你有没有找到解决这个问题的方法?我已经记不清了,但我猜我在node.js代码中做错了什么。