标签: node-request

如何使用 npm 请求将图像作为表单数据发布?

我有一个特定的任务:我需要从源 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)

我试过直接通过表单数据库发布,但它似乎也不起作用。如何在不创建临时文件的情况下解决此问题?

multipartform-data form-data node.js node-request

5
推荐指数
1
解决办法
954
查看次数

Node + ElasticSearch:在GET请求上发送正文?

我使用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)

get request node.js elasticsearch node-request

4
推荐指数
1
解决办法
1992
查看次数

具有请求承诺的顺序请求

是否有一种较少嵌套的方式来实现以下目的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)

每个请求都取决于最后一个的结果,因此它们需要是顺序的.但是,我的一些逻辑需要最多五个连续请求,这会引起很多嵌套的噩梦.

我错了吗?

node.js promise node-request

4
推荐指数
1
解决办法
3553
查看次数

来自 Graph 的 base64 转换照片显示为损坏的图像

我绞尽脑汁(和其他人)试图让它发挥作用。我正在通过 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)

node.js node-request microsoft-graph-api

4
推荐指数
1
解决办法
1445
查看次数

将上传的文件流式传输到 HTTP 请求

我的目标是接受上传的文件并使用Wistia Upload API流式传输到Wistia。我需要能够向 HTTP 请求添加字段,并且我不希望文件接触磁盘。我正在使用NodeExpressRequestBusboy

下面的代码有两个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)

node.js express node-request wistia busboy

3
推荐指数
1
解决办法
1万
查看次数

无法将S3对象读取流通过管道传递到PUT请求

我有一个简单的场景。我需要从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)

request node.js node-request busboy

3
推荐指数
1
解决办法
1184
查看次数

NodeJS请求:如何在管道时获得`response.statusCode`?

对不起伙计们,我有点迷茫.如何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)

node.js express node-request

3
推荐指数
1
解决办法
1万
查看次数

如何使参数在节点JS rest API中可选

我们需要公开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

如何在暴露端点时使参数可选?

rest node.js node-request

2
推荐指数
2
解决办法
5680
查看次数

使用 Node 的 Google API 批量请求

我注意到 Google 最近从他们的 Node 客户端删除了批量请求:

https://github.com/google/google-api-nodejs-client/blob/0db674b7d3a04cf65e223f876cf7b3f427025cd4/MIGRATING.md

如何使用 Node 编写批处理请求?我试图在给定一组邮件 ID 的情况下获取 Gmail 中电子邮件的内容。

以下是 Google 说我应该这样做的方式,但我以前从未提出过此类请求:

https://developers.google.com/gmail/api/guides/batch

google-api node.js google-api-nodejs-client node-request

2
推荐指数
1
解决办法
2858
查看次数

request.getAsync()只返回1个参数

我正在尝试获取返回.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

node.js promise bluebird node-request

2
推荐指数
1
解决办法
2152
查看次数