Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从JS或node.JS发布?_Javascript_Node.js_Google Apps Script_Httprequest - Fatal编程技术网

Javascript 如何从JS或node.JS发布?

Javascript 如何从JS或node.JS发布?,javascript,node.js,google-apps-script,httprequest,Javascript,Node.js,Google Apps Script,Httprequest,我想从我的JS或node.JS文件执行以下POST命令 terminal.zsh 我可以使用以下代码从node.js文件成功地编写.csv文件 node.js 我尝试了以下方法,但没有成功。我希望看到数据击中我的API,但我没有看到任何数据 node.js 我做错了什么? 您希望使用Node.js将CSV文件上载到Google Apps脚本的Web Apps。 从https://script.google.com/macros/s/#/exec,我可以理解您正在使用Google Apps脚本的

我想从我的JS或node.JS文件执行以下
POST
命令

terminal.zsh 我可以使用以下代码从node.js文件成功地编写.csv文件

node.js 我尝试了以下方法,但没有成功。我希望看到数据击中我的API,但我没有看到任何数据

node.js 我做错了什么?

  • 您希望使用Node.js将CSV文件上载到Google Apps脚本的Web Apps。
    • https://script.google.com/macros/s/#/exec
      ,我可以理解您正在使用Google Apps脚本的Web应用程序
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

问题和解决方法: 不幸的是,在当前阶段,在Google Apps脚本的Web应用程序中,即使使用了
multipart/form data
multipart/related
,也无法解析接收到的数据。因此,在本例中,作为一种解决方法,CSV数据作为数据发送

修改脚本: 修改Node.js脚本时,下面的修改如何?使用此脚本之前,请设置Web应用的URL和文件名

const fs = require("fs");
const request = require("request");
request(
  {
    url: "https://script.google.com/macros/s/###/exec", // Please set this.
    method: "POST",
    body: fs.createReadStream("./sample.csv"), // Please set this.
    followAllRedirects: true
  },
  function(err, res, body) {
    if (err) {
      console.log(err);
      return;
    }
    // console.log(res);
    console.log(body);
  }
);
  • 在这个修改后的脚本中,它假设CSV文件作为示例上载。示例CSV文件名为
    sample.CSV
  • 运行此脚本时,CSV文件将上载到Web应用程序
  • followAllRedirects
    是重定向。默认值为
    false
    。因此设置了
    true
    。这是访问Google应用程序脚本的Web应用程序所必需的
  • 如果您想上传像
    data={key1:“value1”,key2:“value2”}
    ,请将
    body:fs.createReadStream(“./sample.csv”),
    修改为
    body:JSON.stringify(data),
    。通过这种方式,可以在
    doPost(e)
    中使用
    JSON.parse(e.postData.contents)
    检索和解析值
Web应用程序的示例脚本:
  • 通过上面的脚本,当运行sample Node.js脚本时,
    sample.csv
    被上传,上传的数据被
    Utilities.parseCsv()
    解析。然后,将解析的值放入活动电子表格的工作表
    Sheet1
  • 如果分隔符不是
    ,请将其设置为
    parseCsv(csv,delimiter)
样本情况: 当以下CSV文件(
sample.CSV
)使用上述Node.js脚本上载到上述Web应用程序时

a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
a3,b3,c3,d3,e3
a4,b4,c4,d4,e4
a5,b5,c5,d5,e5
a6,b6,c6,d6,e6
a7,b7,c7,d7,e7
a8,b8,c8,d8,e8
a9,b9,c9,d9,e9
a10,b10,c10,d10,e10
可以检索以下事件对象。因此,CSV数据可以由
Utilities.parseCsv(e.postData.contents)
解析

注:
  • 修改Web应用的脚本时,请重新部署Web应用。这样,最新的脚本就会反映到Web应用程序中
参考资料:
如果我误解了你的问题,而这不是你想要的方向,我道歉。

  • 您希望使用Node.js将CSV文件上载到Google Apps脚本的Web Apps。
    • https://script.google.com/macros/s/#/exec
      ,我可以理解您正在使用Google Apps脚本的Web应用程序
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

问题和解决方法: 不幸的是,在当前阶段,在Google Apps脚本的Web应用程序中,即使使用了
multipart/form data
multipart/related
,也无法解析接收到的数据。因此,在本例中,作为一种解决方法,CSV数据作为数据发送

修改脚本: 修改Node.js脚本时,下面的修改如何?使用此脚本之前,请设置Web应用的URL和文件名

const fs = require("fs");
const request = require("request");
request(
  {
    url: "https://script.google.com/macros/s/###/exec", // Please set this.
    method: "POST",
    body: fs.createReadStream("./sample.csv"), // Please set this.
    followAllRedirects: true
  },
  function(err, res, body) {
    if (err) {
      console.log(err);
      return;
    }
    // console.log(res);
    console.log(body);
  }
);
  • 在这个修改后的脚本中,它假设CSV文件作为示例上载。示例CSV文件名为
    sample.CSV
  • 运行此脚本时,CSV文件将上载到Web应用程序
  • followAllRedirects
    是重定向。默认值为
    false
    。因此设置了
    true
    。这是访问Google应用程序脚本的Web应用程序所必需的
  • 如果您想上传像
    data={key1:“value1”,key2:“value2”}
    ,请将
    body:fs.createReadStream(“./sample.csv”),
    修改为
    body:JSON.stringify(data),
    。通过这种方式,可以在
    doPost(e)
    中使用
    JSON.parse(e.postData.contents)
    检索和解析值
Web应用程序的示例脚本:
  • 通过上面的脚本,当运行sample Node.js脚本时,
    sample.csv
    被上传,上传的数据被
    Utilities.parseCsv()
    解析。然后,将解析的值放入活动电子表格的工作表
    Sheet1
  • 如果分隔符不是
    ,请将其设置为
    parseCsv(csv,delimiter)
样本情况: 当以下CSV文件(
sample.CSV
)使用上述Node.js脚本上载到上述Web应用程序时

a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
a3,b3,c3,d3,e3
a4,b4,c4,d4,e4
a5,b5,c5,d5,e5
a6,b6,c6,d6,e6
a7,b7,c7,d7,e7
a8,b8,c8,d8,e8
a9,b9,c9,d9,e9
a10,b10,c10,d10,e10
可以检索以下事件对象。因此,CSV数据可以由
Utilities.parseCsv(e.postData.contents)
解析

注:
  • 修改Web应用的脚本时,请重新部署Web应用。这样,最新的脚本就会反映到Web应用程序中
参考资料:

如果我误解了您的问题,并且这不是您想要的方向,我很抱歉。

使用
-v
标志运行
curl
命令以查看请求标题。仅供参考,它没有创建多部分请求。当我执行该命令时,它会发送一个常规的
内容类型:application/x-www-form-urlencoded
请求,请求主体为CSV数据运行带有
-v
标志的
curl
命令以查看请求头。仅供参考,它不是在创建多路径
function doPost(e) {
  var csv = Utilities.parseCsv(e.postData.contents);

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  sheet.appendRow([JSON.stringify(e)]);
  sheet.getRange(sheet.getLastRow() + 1, 1, csv.length, csv[0].length).setValues(csv);

  return ContentService.createTextOutput("ok");
}
a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
a3,b3,c3,d3,e3
a4,b4,c4,d4,e4
a5,b5,c5,d5,e5
a6,b6,c6,d6,e6
a7,b7,c7,d7,e7
a8,b8,c8,d8,e8
a9,b9,c9,d9,e9
a10,b10,c10,d10,e10
{
  "parameter": {},
  "contextPath": "",
  "contentLength": 165,
  "queryString": "",
  "parameters": {},
  "postData": {
    "type": "text/csv",
    "length": 165,
    "contents": "a1,b1,c1,d1,e1\r\na2,b2,c2,d2,e2\r\na3,b3,c3,d3,e3\r\na4,b4,c4,d4,e4\r\na5,b5,c5,d5,e5\r\na6,b6,c6,d6,e6\r\na7,b7,c7,d7,e7\r\na8,b8,c8,d8,e8\r\na9,b9,c9,d9,e9\r\na10,b10,c10,d10,e10\r\n",
    "name": "postData"
  }
}