Tag: 节点请求

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

我的目标是接受上传的文件,并使用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); }); […]

NodeJS请求:如何获得响应作为一个string?

我有点失落 是否有可能在.on(response) (请参阅下文)中将响应主体作为string.on(response) ? 还是我疯了? 我知道我可以将一个WriteStream响应,但我需要响应正文和响应statusCode在同一个地方,以继续我的代码。 谢谢! var request = require("request"); request(url) .on('response', function(response) { console.log(response.statusCode); // 200 console.log(/* I need to get response body string here */); // <— can I have the response body as a string here? }) .on("error", function(err){ console.log("Problem reaching URL: ", err); });

如何使参数在节点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){ }); 当我们通过传递所有三个参数,它工作正常。 但是我们想通过只传递userId或这三个参数中的任何一个来使其工作。 当我们传递更less的参数给它的错误Cannot GET /v1/api/test-api/test5/123 如何在暴露端点时使参数可选?

为什么request.on()不能在Node.js中工作

我正在尝试使用节点请求模块从第三方服务获取一些数据,并将该数据作为string从函数中返回。 我的看法是, request()返回一个可读的stream,因为你可以做request(…).pipe(writeableStream) – 我认为 – 暗示我可以做 function getData(){ var string; request('someurl') .on('data', function(data){ string += data; }) .on('end', function(){ return string; }); } 但是这并不是真的有用。 我想我对request()或节点stream如何真正起作用有一些错误的认识。 有人可以澄清我的困惑吗?

请求承诺的顺序请求

有没有一个嵌套的方式来实现以下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 // ….. }); }); 每个请求都取决于最后的结果,所以它们需要是顺序的。 然而,我的一些逻辑需要多达五个连续的请求,并导致相当嵌套的噩梦。 我是否在谈论这个错误?

从callback函数中返回一个对象,这样一个包装函数可以返回node.js / express中的同一个对象

我正在尝试从调用第三方API的数据中返回一个对象。 我正在使用请求( https://github.com/mikeal/request )模块来完成相同的。 不过,我想从callback函数中返回这个对象。 我的请求调用是一个JavaScript函数的一部分,我希望这个外部函数能够返回新构造的对象。 由于node.js的非阻塞性质,我面临着问题,因为每当我尝试从外部函数返回对象时,由于callback函数尚未构造对象,它将返回一个空对象。 我怎样才能做到这一点? function getData(url){ var myWeatherData = new Object(); var data; request(url, function (error, response, body) { if (!error && response.statusCode == 200) { data = JSON.parse(body); myWeatherData.locationName = data.current_observation.display_location.full; myWeatherData.weather = data.current_observation.weather; myWeatherData.temperature_string = data.current_observation.temperature_string; myWeatherData.relative_humidity = data.current_observation.relative_humidity; myWeatherData.wind_string = data.current_observation.wind_string; myWeatherData.feelslike_string = data.current_observation.feelslike_string; } return myWeatherData; // […]

节点快递/请求:通过正文parsing来pipe理POST请求

我试图通过远程服务器pipe理一个请求,如下所示: var destination = request(url); req.pipe(destination).pipe(res); 这对GET请求很好。 但是对于POST请求,我正在挣扎。 重要的一点是,我认为,对于POST请求,我在POST路由处理程序之前使用了一个主体parsing器,以便从POST请求中提取主体…这只是一个基本的文本主体parsing器,因为主体包含纯文本: var postRouteHandler = someFunction; var bodyParser = require('body-parser'); var textParser = bodyParser.text({ limit: '50kb' }); app.use('/postRoute', [textParser, postRouteHandler]); 从这个问题和这个问题在我看来,做任何处理的POST请求之前,你pipe它会导致一个问题。 事实上,当我删除parsing器时,pipe道似乎工作正常。 问题是我需要首先检查一下机体,做一些初始化处理,然后决定是否将请求传送到远程服务器上。 所以我需要在pipe道之前parsing身体。 有没有办法解决这个问题?

具有自动ntlm / Kerberosauthentication的node.js HTTP请求

通过npm查看所有ntlm / kerberos模块似乎想要一个硬编码的用户名和密码执行HTTP请求对Windowsauthentication端点。 是否有可能使用当前login的用户的凭据? 例如在PowerShell中,我可以这样做: $wc = new-object System.Net.WebClient $wc.UseDefaultCredentials = $true 这将是所有可能的节点?

NodeJS Express变得无响应,并获取超时

我有一种感觉,我有某种地方的泄漏,但我不知道如何识别或排除故障。 我使用express和nodejs的请求模块。 在负载下,通过请求向Facebook Graph API发起的https呼叫开始经历长时间延迟或超时。 起初,我认为这是一个在接收端(Facebook)的节stream问题,但是如果我做一个简单的C#控制台应用程序调用相同的URL几百次,没有一个响应时间大于150毫秒。 但是,节点中的相同代码从50ms到10s不等。 如果我使用请求时设置了超时属性,我开始得到ESOCKETTIMEDOUT错误。 如果我将请求选项上的pool.maxsize设置为100,那么我会得到ETIMEDOUT错误。 我怎样才能弄清楚我的挂断发生在哪里? 这是我使用请求模块的一个示例。 我也尝试添加到我的应用程序: require('http').globalAgent.maxSockets = Infinity; require('https').globalAgent.maxSockets = Infinity; var executeGetUrl = function getUrl(url, cacheKey, parseJson, accessToken, callback) { if (accessToken) { url = url + '?access_token=' + accessToken; } try { request({url: url, timeout: 10000, 'pool.maxSockets' : 100}, function (err, res, body) { if (err) […]

使用请求和gm模块在NodeJS中下载后立即调整图像大小

我正在尝试调整图像的大小后,我已经下载它们使用nodejs,请求和gm模块,但我很难正确地pipe理的东西了。 var fs = require('fs'); var path = require('path'); var gm = require('gm').subClass({imageMagick: true}); var request = require('request'); var async = require('async'); var folderImages = './images/'; var q = async.queue(function (task, callback) { // Renaming the images var thumb350 = task.target.replace('.jpg', '-350.jpg'); // The target path/images var target350 = path.join(folderImages, thumb350); // Download the images […]