有没有办法在nodeJS POST API请求中指定本地文件系统路径,能够使用curl而不是nodejs进行api调用

Posted

技术标签:

【中文标题】有没有办法在nodeJS POST API请求中指定本地文件系统路径,能够使用curl而不是nodejs进行api调用【英文标题】:Is there way to specify local file system path in nodeJS POST API request , am able to make api call using curl but not with nodejs 【发布时间】:2020-05-15 15:01:43 【问题描述】:

以下 curl API 成功将 .zip 文件从本地文件系统部署到 Azure Function APP。

curl -X POST -u user123:P@ssword --data-binary @"C:\Ddrive\Porject\deploy-zip\wb-uc-code.zip" "https://abc-world.scm.azurewebsites.net/api/zipdeploy"

但我想用 NodeJs 实现同样的效果:所以我将它转换为 -

函数()

var dataString = "@C:\Ddrive\Workbench\deploy-zip\wb-uc1.zip";

var options = 
    url: 'https://abc-world.scm.azurewebsites.net/api/zipdeploy',
    method: 'POST',
    body: dataString,
    auth: 
        'user': 'user123',
        'pass': 'P@ssword'
    
;

request.post(options, (response, error) => 
    if (error) 
        console.log("error");
    
    else 
        console.log(response.body);
    
)

执行时出现错误: -------->>> 很可能我认为无法在 Options 中适当地提供文件路径。有人可以帮忙吗?

【问题讨论】:

见:github.com/request/request#streaming 【参考方案1】:

有两点需要注意。

1.你应该传递data-binary,你在你的代码中传递路径字符串。

2.responseerror的顺序颠倒了。

请参考下面的工作代码。

var request=require('request')
var fs = require("fs")

var dataString=fs.createReadStream("D:\\testProject\\NodeJs\\nodejs-docs-hello-world\\test4.zip");

var options = 
    url: 'https://tonytestwebnode.scm.azurewebsites.net/api/zipdeploy',
    method: 'POST',
    body: dataString,
    auth: 
        'user': 'tonytestweb',
        'pass': 'XXXX!'
    
;

request.post(options, (error, response) => 
    console.log(response.statusCode);
)

【讨论】:

感谢您的帮助,该错误已解决,但部署不成功,我收到 500 错误代码,但使用 curl 进行部署也是如此。 @GKAMESWARRAO 详细的错误信息是什么?密码正确吗? 是的,我检查了文件路径是否正确,我相信您的代码也是正确的。你能在 Azure AppService 中部署文件吗?我正在尝试通过此 URL 部署功能 App,尽管它是由 curl 部署的,而在尝试使用 Node 实现相同功能时遇到了问题。 @GKAMESWARRAO 是的,我成功部署了一个 webapp。您需要查看详细的错误信息。 @GKAMESWARRAO 请检查此链接***.com/questions/20960403/…

以上是关于有没有办法在nodeJS POST API请求中指定本地文件系统路径,能够使用curl而不是nodejs进行api调用的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS-ExpressJS 猫鼬 API POST 请求与外键

从 Angular/NodeJS/ExpressJS 向 3rd 方 URL 的 POST 请求

如何将在 Lambda 上使用 NodeJS 丰富的对象返回到 API POST 请求

NodeJS - 只有 OPTIONS 请求被发送到 REST API,POST 或 GET 不跟随(Cloudflare)

nodejs:app.use处理post请求

有没有办法在 REST API Jersey 中检测预检请求?