标签: requestjs

NodeJS请求多个api端点

好的,我正在尝试使用请求模块向API端点发出两个或更多请求.我正在渲染一个HTML文件,并使用以下代码将返回的JSON传递给把手模板:

res.render('list.html', {
  title: 'List',
  data: returnedJSON
}
Run Code Online (Sandbox Code Playgroud)

然后我可以很容易地在我的把手模板中迭代这个JSON.

我遇到的问题是,我现在需要使用多个数据源,其中类别列表将根据JSON响应类别和员工JSON响应中的Staff列表构建.我想要一个简单的解决方案,我可以做到这一点,但扩展它使用任意数量的数据源.

下面是我对一个数据源的完整代码片段:

request({
    url: 'https://api.com/categories',
    headers: {
        'Bearer': 'sampleapitoken'
    }
}, function(error, response, body) {
    if(error || response.statusCode !== 200) {
        // handle error
    } else {
        var json = JSON.parse(body);
        res.render('list.html', {
            title: 'Listing',
            data: json
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

这适用于一个端点,但如前所述,我现在需要使用多个请求并拥有多个数据源,例如:

request({
    url: ['https://api.com/categories','https://api.com/staff'],
    headers: {
        'Bearer': 'sampleapitoken'
    }
}, function(error, response, body1, body2) {
    if(error || response.statusCode !== 200) {
        // handle error
    } else {
        var json1 = JSON.parse(body1); …
Run Code Online (Sandbox Code Playgroud)

javascript json node.js express requestjs

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

使用请求js进行http服务单元测试时,chai.request不是一个函数

我一直在使用业力+ requestjs + mocha + chai和sinon.我一直在使用chai-http模块但收到chai.request不是一个函数.请指出我在哪里弄错了我google了很多没有运气呢.

(function() {
  var specFiles = null;
  var baseUrl = '';
  var requirejsCallback = null;
  if (typeof window != 'undefined' && window.__karma__ != undefined) {

    baseUrl = '/base';
    requirejsCallback = window.__karma__.start;
    specFiles = [];
    for (var file in window.__karma__.files) {
      if (window.__karma__.files.hasOwnProperty(file)) {
        if (/.*\/js\/spec\/.+_spec\.js$/.test(file)) {
          specFiles.push(file);
        }
      }
    }
  }

  requirejs.config({
      baseUrl: baseUrl,

      paths: {
        'chai': './node_modules/chai/chai',
        'sinon': './node_modules/sinon/pkg/sinon',
         'chaihttp': './node_modules/chai-http/dist/chai-http',
      },

      deps: specFiles,
      callback: requirejsCallback
  });
})();


**Spect-Test.js**

 define(['chai', 'sinon', 'chaihttp'], function (chai, …
Run Code Online (Sandbox Code Playgroud)

javascript mocha.js chai karma-runner requestjs

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

将分段上传部分传输到新请求时出现“标题内容包含无效字符”错误

我的快递服务器接收来自浏览器的文件上传。上传作为multipart/form-data请求传输;我使用多方来解析传入的实体主体。

Multiparty 允许您将一部分(粗略地说,单个表单字段,如<input type="file">)作为可读流。我不想在我的 Web 服务器上处理或存储上传的文件,所以我只是将上传的文件部分通过管道传输到另一个服务的请求中(使用请求模块)。

app.post('/upload', function(req, res) {
    var form = new multiparty.Form();

    form.on('part', function(part) {

        var serviceRequest = request({
            method: 'POST',
            url: 'http://other-service/process-file',
            headers: {
                'Content-Type': 'application/octet-stream'
            }
        }, function(err, svcres, body) {
            // handle response
        });

        part.pipe(serviceRequest);
    });

    form.parse(req);
});
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都能正常工作。node 自动应用分块传输编码,当浏览器上传文件字节时,它们作为原始实体主体(没有多部分格式)正确发送到后端服务,最终获取完整文件并成功返回。

但是,有时请求会失败并且我的回调会被调用err

TypeError: The header content contains invalid characters 
    at ClientRequest.OutgoingMessage.setHeader (_http_outgoing.js:360:11) 
    at new ClientRequest (_http_client.js:85:14) 
    at Object.exports.request (http.js:31:10) 
    at Object.exports.request (https.js:199:15) 
    at Request.start (/app/node_modules/request/request.js:744:32) …
Run Code Online (Sandbox Code Playgroud)

multipartform-data node.js express requestjs multiparty

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

node.js中ForEach中的异步请求

我是node.js(和request.js)的新手.我想从不同的路径特定URL获得一个网站的机身背部(在下面的例子中http://www.example.com/path1,http://www.example.com/path2等. )并使用键/值映射(下面的siteData [path])将此数据记录在对象中.

var request = require('request'),
    paths = ['path1','path2','path3'],
    siteData = {},
    pathLength = paths.length,
    pathIndex = 0;

paths.forEach((path) => {
    var url="http://www.example.com/"+path;
    request(url, function(error, response, html){
        if(!error){
            siteData[path] = response.body;
            pathIndex++;
            if(pathIndex===pathLength){
                someFunction(siteData);
            }
        }
});

function someFunction(data){
    //manipulate data
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • if语句(索引===长度)看起来不像是确定异步请求是否完成的正确方法.我该如何正确检查请求是否完成?
  • 当我执行上面的代码时,我得到一个错误,(node) warning: possible EventEmitter memory leak detected. 11 unpipe listeners added. Use emitter.setMaxListeners() to increase limit.我尝试链接,request(url, function(...){}).setMaxListeners(100);但这不起作用.

谢谢你的帮助!

foreach asynchronous node.js requestjs

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

NodeJS模块'request'返回一些符号而不是html

我正在学习Nodejs,并尝试使用node.js进行网络报废

我正在使用节点模块requestcheerio

但是当我请求url时,它会返回一些符号而不是html正文

var request = require('request');
var cheerio = require('cheerio');
request({
    url:"http://mangafox.me/manga/shingeki_no_kyojin/v00/c000/1.html"
},(err, res, body) => {
    if(err) throw err;

    else {
        var $ = cheerio.load(body);
        console.log(body);
        }
});
Run Code Online (Sandbox Code Playgroud)

在命令提示符下输出

在此输入图像描述

谁能告诉我这里有什么问题?

谢谢

javascript node.js npm cheerio requestjs

0
推荐指数
1
解决办法
400
查看次数