我有一个特定的任务:我需要从源 URL 下载一个图像,然后通过 POST 请求将它作为 multipart/form-data 上传到另一个主机。我正在尝试使用 node.js 请求库,但从未成功。以下代码不会在请求正文中发送任何内容。
request.post({
url: uploadUrl,
formData: {
photo: request(imageUri)
}
}, function (err) {
if (err) console.error(err.stack)
});
Run Code Online (Sandbox Code Playgroud)
我试过直接通过表单数据库发布,但它似乎也不起作用。如何在不创建临时文件的情况下解决此问题?
我使用Node.js和request模块来创建后端,我们选择Elasticsearch作为我们的数据存储.到目前为止一切正常,除了似乎Node不支持GET请求的请求主体?这对于Elasticsearch的_searchAPI是必要的,它只期望GET请求作为其语义设计的一部分.是否存在强制Node即使在GET请求的情况下发送请求主体的解决方案,还是_search在Elasticsearch上使用另一个HTTP动词的意思?
function elasticGet(url, data) {
data = data || {};
return Q.nfcall(request.get, {
uri: url,
body: JSON.stringify(data) //<-- noop
}).then(function(response) {
return JSON.parse(response[1]);
}, function(err) {
console.log(err);
});
}
Run Code Online (Sandbox Code Playgroud) 是否有一种较少嵌套的方式来实现以下目的request-promise:
r = require('request-promise');
r(url1).then(function(resp1) {
// Process resp 1
r(url2 + 'some data from resp1').then(function(resp2) {
// Process resp 2
// .....
});
});
Run Code Online (Sandbox Code Playgroud)
每个请求都取决于最后一个的结果,因此它们需要是顺序的.但是,我的一些逻辑需要最多五个连续请求,这会引起很多嵌套的噩梦.
我错了吗?
我绞尽脑汁(和其他人)试图让它发挥作用。我正在通过 MS Graph API 拉一张照片 - 这部分工作正常。我能够接收数据(以字节为单位)。但是,我无法将图像正确转换为附加为文件并发布。
我已经阅读了几篇关于 SO 和 GH 的帖子,并尝试了大约 10 种不同的 npm 包和风格(btoa、atob 等......出于绝望),包括来自Graph docs的 JS 示例。没有任何解决方案奏效。npm 包都产生彼此不同的输出,当我拍摄照片并上传到在线 base64 转换器时,它们都与输出不匹配。另外,如果我进行在线转换并将输出字符串直接放入代码中,它就可以工作。
这是我的代码的当前迭代。任何帮助,将不胜感激。
var optionsPhoto = {
url: "https://graph.microsoft.com/v1.0/me/photo/$value",
method: "GET",
headers: {
Authorization: "Bearer " + token
}
};
await request(optionsPhoto, function callback(error, response, body) {
if (!error && response.statusCode == 200) {
photoResponse.data = [
{
"@odata.type": "#microsoft.graph.fileAttachment",
contentBytes: body.split(",").toString("base64"),
contentLocation: "https://graph.microsoft.com/v1.0/me/photo/$value",
isinline: true,
Name: "mypic.jpg"
}
];
photoResponse.ContentType = response.headers["content-type"].toString();
photoResponse.Base64string = (
"data:" …Run Code Online (Sandbox Code Playgroud) 我的目标是接受上传的文件并使用Wistia Upload API将其流式传输到Wistia。我需要能够向 HTTP 请求添加字段,并且我不希望文件接触磁盘。我正在使用Node、Express、Request和Busboy。
下面的代码有两个console.log语句。第一个返回[Error: not implemented],第二个返回[Error: form-data: not implemented]。我是 Node 中的流媒体新手,所以我可能在做一些根本性的错误。任何帮助将非常感激。
app.use("/upload", function(req, res, next) {
var writeStream = new stream.Writable();
writeStream.on("error", function(error) {
console.log(error);
});
var busboy = new Busboy({headers: req.headers});
busboy.on("file", function(fieldname, file, filename, encoding, mimetype) {
file.on("data", function(data) {
writeStream.write(data);
});
file.on("end", function() {
request.post({
url: "https://upload.wistia.com",
formData: {
api_password: "abc123",
file: new stream.Readable(writeStream)
} …Run Code Online (Sandbox Code Playgroud) 我有一个简单的场景。我需要从S3中读取一个对象并将其输出传递给PUT请求。这是我使用request的代码。
// client.js
let AWS = require('aws-sdk')
let request = require('request')
let bucket = 'my_bucket'
let filename = 'path/to/file.zip'
let host = 'localhost'
let port = 8080
let s3 = new AWS.S3({
. . .
})
let readStream = s3.getObject({
Bucket: bucket,
Key: filename
}).createReadStream()
let formData = {
applicationType: 'my_app_type',
applicationName: 'my_app_name',
upload: {
value: readStream,
options: {
filename: 'my_file_name.zip',
contentType: 'application/zip'
}
}
}
request.put({
url: 'http://' + host + ':' + port + …Run Code Online (Sandbox Code Playgroud) 对不起伙计们,我有点迷茫.如何response.statusCode在管道时使用console.log ?
var express = require('express');
var path = require('path');
var request = require('request');
var fs = require('fs');
var app = express();
var port = 8000;
var destination = fs.createWriteStream('./downloads/google.html');
var url = "http://www.google.com/";
request(url).pipe(destination)
.on("finish", function() {
console.log("done");
console.log(response.statusCode); // <<<<<<<<<<<<<<<<<<<<<<<<<<<< this
})
.on("error", function(err){
console.log(err);
});
app.listen(port, function(){
console.log('running server on ' + port);
});
Run Code Online (Sandbox Code Playgroud) 我们需要公开REST端点.有三个参数,如何使这些可选.要求是它应该与这些参数中的任何一个一起使用.
例如 http://server:port/v1/api/test-api/userId/UnameName/userEmail
app.get('v1/api/test-api/:userId/:userName/:userEmail', function(req, res){
});
Run Code Online (Sandbox Code Playgroud)
当我们通过传递所有三个参数调用它工作正常.但我们希望通过仅传递userId或这三个参数中的任何一个来使其工作.当我们传递较少的参数时,给出错误Cannot GET /v1/api/test-api/test5/123
如何在暴露端点时使参数可选?
我注意到 Google 最近从他们的 Node 客户端删除了批量请求:
如何使用 Node 编写批处理请求?我试图在给定一组邮件 ID 的情况下获取 Gmail 中电子邮件的内容。
以下是 Google 说我应该这样做的方式,但我以前从未提出过此类请求:
我正在尝试获取返回.cert主体的请求,但是使用bluebird的.spread似乎只返回1个参数,而不是它应该返回两个参数.
request.getAsync( {url: payload.publicKeyUrl, encode:null } )
.spread( function(res, body){
console.log(body);
} );
Run Code Online (Sandbox Code Playgroud)
这将抛出一个未定义主体的错误.响应返回ENTIRE json格式,包括与结构混淆的字符串格式的证书.
我正在使用请求2.67.0和bluebird 3.1.1.这是证书网址:https://static.gc.apple.com/public-key/gc-prod-2.cer