使用托管文件将 Axios 卷入 NodeJS

问题描述

我正在尝试将此 cURL 命令转换为使用 AXIOS 的请求

`curl -X POST "https://serverless-upload.twilio.com/v1/Services/${service_uid}/Functions/${function_uid}/Versions" \
    -F "Content=@./template_scripts/collect.js; type=application/javascript" \
    -F "Path=collect.js" \
    -F "Visibility=public" \
    -u "${client.accountSid}:${client.password}"`

我这样做的尝试是这样的:

    collect_file = ""
    await axios.get("https://pastebin.com/raw/RFYs4n2p").then((r) =>  collect_file = r.data)

    url = `https://serverless-upload.twilio.com/v1/Services/${service_uid}/Functions/${function_uid}/Versions`

    form = new FormData();
    form.append("Path","collect");
    form.append("Visibility","public");
    form.append("Content",collect_file);
    form.append("filename","collect.js");
    form.append("contentType","application/javascript");

    await axios.post(url,form,{
    headers: {
        Authorization: 'Basic ' + Buffer.from(`${accountSid}:${authToken}`).toString('base64'),...form.getHeaders(),},})

在填写“内容”参数时,我使用的是我在 Pastebin 上托管的 JS 文件的文本表示。在初始 cURL 命令中,您会看到我指定了文件 ./template_scripts/collect.js 我不想使用 fs 加载“collect.js”文件,因为我希望代码不使用文件系统。

我得到的错误

Error: Request Failed with status code 400
{
  message: 'Invalid function version content.',code: 20001,user_error: true,http_status_code: 400,params: {}
}
400
{
  date: 'Wed,10 Feb 2021 13:39:08 GMT','content-type': 'application/json','content-length': '113',connection: 'close','t-request-id': 'RQ1bf727ce267b5b974cd1eeab122ad02e','x-shenanigans': 'none','access-control-allow-origin': '*','access-control-allow-headers': 'Accept,Authorization,Content-Type,If-Match,If-Modified-Since,if-none-match,If-Unmodified-Since','access-control-allow-methods': 'GET,POST,DELETE,OPTIONS','access-control-expose-headers': 'ETag','access-control-allow-credentials': 'true','x-powered-by': 'AT-5000','x-home-region': 'us1','x-api-domain': 'serverless-upload.twilio.com','strict-transport-security': 'max-age=31536000'
}

我假设问题可能与使用 JS 文件的文本版本有关,但并不完全确定。从 pastebin 读取时,它会以“字符串”类型返回。

谢谢!

解决方法

将文件名作为“内容”参数的第三个参数

form.append("Content",collect_file,"collect.js");