Tag: 请求

如何在node.js中对http请求进行排队? 为每个路线创build单独的队列

我想在node.js中创build一个请求队列。 对于每条路线,都必须有一个单独的队列来排队只需要那条路线。 例如: 路由:localhost:3000 / que100 queue100 = [req1,req2,req3 … reqN]; 路由:localhost:3000 / que101 queue101 = [req1,req2,req3 …. reqN]; 我想按顺序处理请求,但不想在处理其他路由请求时阻止不同路由的请求。 所以我想实现不同的队列可以并行工作的每个路由。 请提出一些实施的想法。

在Node.js中发送获取请求时获取HPE_INVALID_TOKEN_ERROR

这个代码在昨天/今天早些时候完美地工作,现在它响应请求callback的错误中的空响应和正文以及HPE_INVALID_TOKEN_ERROR 。 我真的不知道该怎么做。 this.getVerifyAge = () => { return new Promise((resolve, reject) => { let url = 'https://club.pokemon.com/us/pokemon-trainer-club/sign-up/'; //let url = 'https://www.google.ca' let headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate, sdch, br', 'Accept-Language': 'fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4', 'Connection': 'keep-alive', 'Host': 'club.pokemon.com', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36' }; […]

自签名证书错误与NodeJS请求

我在代理服务器中使用NodeJS的请求库。 我有它正常工作,但我想要更改代理,以便而不是转发HTTP请求到HTTP地址,入站HTTP请求转发到HTTPS地址。 但是当我运行并尝试使用代理时,出现以下错误: stream.js:74 throw er; // Unhandled stream error in pipe. ^ Error: self signed certificate in certificate chain 我遵循在线说明来创build一个密钥,crt和一个假证书颁发机构(链接到代码中),但上面的错误表明它仍然不能正常工作。 我做什么显然是错的? 我的代码如下所示: var certFile = path.resolve(__dirname, 'server.CA-signed.crt'); var keyFile = path.resolve(__dirname, 'server.CA.key'); var ca = path.resolve(__dirname, 'demoCA/newcerts/1234567890.pem'); app.use(function(req, res) { var rewriter = request({ url: rewrite(req.url), qs: req.query, cert: fs.readFileSync(certFile), key: fs.readFileSync(keyFile), passphrase: 'foobar', […]

错误:options.uri是必需的参数

我正在使用node.js v4.6.0和express,request和body-parser的最新版本,但是我得到了一个我无法修复的错误代码,有什么想法? 这是我的代码: var express = require('express'); var request = require('request'); var bodyparser = require('body-parser'); var app = express(); app.use(bodyparser.urlencoded({extended: true})) var webhook = process.env.DISCORD_WEBHOOK; app.get('/', (req, res) => { res.sendFile(__dirname + '/index.html'); }); app.post('/webhook', (req, res) =>{ request({ method: 'POST', url: webhook, json: { "content": req.body.msg, "username": "Potato" } }); res.redirect("/"); }); app.listen(80, () […]

Node JS / Express:如何parsing外部API调用的多部分响应

我使用npm Request模块进行外部API调用,该模块返回多部分表单数据。 以下是请求的代码段(不完整): request.get(options, function (err, httpResponse, body) { if (err) { return console.error('Error:', err); } console.log(body); }); 以下是响应主体(上面logging的控制台)的示例: –multipartBoundary Content-Disposition: form-data; name="file"; filename="loremipsum.sample" Content-Type: application/octet-stream Content-Transfer-Encoding: base64 TG9yZW0gSXBzdW0gaXMgc2ltcGx5IGR1bW15IHRleHQgb2YgdGhlIHByaW50aW5nIGFuZCB0eXBlc2V0dGluZyBpbmR1c3RyeS4gTG9yZW0gSXBzdW0gaGFzIGJlZW4gdGhlIGluZHVzdHJ5J3Mgc3RhbmRhcmQgZHVtbXkgdGV4dCBldmVyIHNpbmNlIHRoZSAxNTAwcywgd2hlbiBhbiB1bmtub3duIHByaW50ZXIgdG9vayBhIGdhbGxleSBvZiB0eXBlIGFuZCBzY3JhbWJsZWQgaXQgdG8gbWFrZSBhIHR5cGUgc3BlY2ltZW4gYm9vay4gSXQgaGFzIHN1cnZpdmVkIG5vdCBvbmx5IGZpdmUgY2VudHVyaWVzLCBidXQgYWxzbyB0aGUgbGVhcCBpbnRvIGVsZWN0cm9uaWMgdHlwZXNldHRpbmcsIHJlbWFpbmluZyBlc3NlbnRpYWxseSB1bmNoYW5nZWQuIEl0IHc= –multipartBoundary Content-Disposition: form-data; name="json_detail" Content-Type: application/json;charset=utf-8 { "filename":"1478162481102.sdoc", "date_modified":"1478170365000", } –multipartBoundary– 我的问题是: 这个响应是以stream/文本表示的MultipartForm数据是正确的吗? 我怎样才能parsing响应的方式,它返回文件对象(在这种情况下是两个文件)? 我相信我不能使用中间件,因为这是一个外部的API调用。 我尝试了以下内容: pipe道到文件(这只是pipe道响应到一个文件) Http.get和busboy 我最后的select似乎是使用正则expression式parsing响应并写入文件。 这似乎是缓慢的 任何input将不胜感激! 谢谢!

在nodejs中解压缩文件夹时无效的签名错误

我使用unzip节点模块解压缩我的binary-data (来自request模块)。 当request模块的response不包含zip文件夹binary data (如果响应没有zip文件夹数据,其他二进制数据),在某些情况下失败。 我如何处理这个例外。 const request = require("request"); const unzip = require('unzip'); const stream = require('stream'); var options = { method: 'GET', url: /*URL*/, encoding: null }; request(options, function (error, response, body) { zipExtract(error, body); }); zipExtract: function zipExtract(error, zipData) { if (error) { console.error(error); } else { try { //create stream object […]

从url上传图片到multipart / form-data端点

我有一个端点,只接受在请求正文中作为多部分MIME内容上传的图像。 这是没有问题的,如果我有图像下载和重新上传,但我想上传从其他地方的图像,我不知道该怎么做。 有没有任何想法来处理这种情况下没有下载图像本地重新上传? 我一直在尝试使用请求库来获取图像数据内容,并将其作为表单数据追加到我的后续上载POST请求中,但是这也不起作用… request.get(IMAGE_URL, function(err, res, body) { var imageData = body; var r = request.post(UPLOAD_URL, function(err2, res2, body2) { //** blah **// } var form = r.form(); form.append('data', imageData); }

在nodejs的请求模块中发送大的xml

我有一个非常大的xml使用wsjs节点模块生成。 看起来像 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:diag="http://diagnostic.ws.fcrewards.test.com/" xmlns:ws="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><soapenv:Header><ws:Action>http://diagnostic.ws.fcrewards.test.com/doEcho</ws:Action><ws:To>https://ws.mastercard.com/mtf/MRS/DiagnosticService</ws:To><ws:MessageID>35b479f1-5a54-e9a4-5551-0f15507f54b8</ws:MessageID><ws:ReplyTo><ws:Address>http://www.w3.org/2005/08/addressing/role/anonymous</ws:Address></ws:ReplyTo><o:Security><u:Timestamp wsu:Id="_0" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><u:Created>2017-02-24T17:13:13Z</u:Created><u:Expires>2017-02-24T17:18:13Z</u:Expires></u:Timestamp><o:BinarySecurityToken ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" u:Id="sec_0">MIID1zCCAr+gAwIBAgIRAIVAIPeDa+CgeYorExNgwDQYJKoZIhvcNAQELBQAwgYUxCzAJBgNVBAYTAkJFMRwwGgYDVQQKExNNYXN0ZUNhcmQgV29ybGR3aWRlMSQwIgYDVQQLExtHbG9iYWwgSW5mb3JtYXRpb24gU2VjdXJpdHkxMjAwBgNVBAjdjdjjdjdjjdjjdQgUFJEIE1lc3NhZ2VzIFNpssssssssssssssssssssssssIxNjIxMzcwN1owZjEbMBkGA1UEAxMSbXRmLkNIUy5wYXlGb3J3jdjjdjdjdjjdjjndkwlklwlwlwww25pbmcgU1cxDjAMBgNVBAsTBUNIUyAxMQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM675qti1N/aMP+YsPe9UIaJasISYzIpEoysKhClmWfBTqJTrcw0UWnraSOGqdPvEpgcLdW2BwnZ+T2gmcLa/BY69hW+CYm0pR0px9MPNuP77YcJCS5d6ffuHvTlkVpBq2hWVhOck0X0uhu+m2I6G8Dshi8yiBJohs+jpuf63OxVtBTemFNM5pVDdB5z7sYhkrdcNzlSoPTKNcTFfZgnj0G6iwkb4XK1mSlXbQL8jYEPPZWDdxPFl1SrSnwUoyl3r84SZrV13JstZ4YrolAm8mmKB7pU+bJ46+zpeYDRDo/YH4cxSpkyPUuwB27PtLk1J/9FgBNLfY0XQnlk/b3Mm3MCAwEAAaNgMF4wHwYDVR0jBBgwFoAU66ASd4JT9FhYrwHp4f9kBT5H2aowDAYDVR0TBAUwAwIBADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFJ1obzmA1M2PIL8GumtHSIdwUrZMMA0GCSqGSIb3DQEBCwUAA4IBAQASqfFjdTt74OHwmEJVlO3pYnnHcxvDU0v7+2xTTMpWSAKmfDGf5j71UDsa6E/ymclcz/mdbsHSvyYii8TsrYK8Nyq6o2nTAQ0mhRhSpip7kjv5eQ0PtJZhl0Je7W9b3GIS1M5IbNN7xusKNHaJSg7ZIf/gUwWuBOq1CxABE0xRGY5b5e6giglP2iJwgeOHukmeGiLck3HGqZjei+T/Fnvsyy7hQ6qzGTDZg6B6yd1ojMZddmjDV8QsQfUQWM0//rvORZup98VP7I9LmrDBQuu7cPPy0Vg8VRWZC9wrM82e6IHl1uMovU12PCth1vAcSyTjuorNn5NoQg8FIoLCdgLk</o:BinarySecurityToken><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><Reference URI="#_0"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>qNgtbxFDtGr1QCRG4ZnGSzfWqQ+GZJkuQAHgTxcI4B8=</DigestValue></Reference></SignedInfo><SignatureValue>ZqHJTwD91tcddddddddd3uZkuChVE0BHEx55YF3kGNw1D55VbunmbNZkmxxkuBvyAMjns/DJ8/duThXhlAmyPLYhRgj4djz8smJbksago1Tb+DFT8RQ4tOVPD2TPSaC5wrwA9g9zCCpPDHHv5FmZ4TIxwkPjG37MBqOIgUF8cUkL9kXU0sIJrUQddddddddddddddddddddddddddddddddddddddddddddddddddddddwsRtcjKDksvWpMBj0oSysWi+8/ce2HnO4nOuhrvX66BDOAyPL+avL2+JNTlA==</SignatureValue><KeyInfo><o:SecurityTokenReference><o:Reference URI="#sec_0" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></o:SecurityTokenReference></KeyInfo></Signature></o:Security></soapenv:Header><soapenv:Body><diag:doEcho>Cieran</diag:doEcho></soapenv:Body></soapenv:Envelope> 当我发送这个请求使用node.js的请求模块 request.post({ url: ctx.url, body: ctx.request, headers: { "SOAPAction": ctx.action, "Content-Type": ctx.contentType, "ContentLength": Buffer.byteLength(ctx.request), "MIME-Version": "1.0", "Connection": "Keep-Alive", "AcceptEncoding": "gzip" }, encoding: null, rejectUnauthorized: true, agentOptions: ctx.agentOptions }, function(error, response, body) { ctx.response = body […]

node.js通过HTTPS获得文件套接字hangup

我想通过https从一个URL获取文件,并得到以下错误: 错误:套接字挂断 有趣的是,通过浏览器访问这个文件和curl正在工作,但不是通过node.js(请求)和wget。 我调查了这个问题,发现了以下内容: 服务器的SSL证书由DigiCert颁发,并包含一个通常不预安装的证书,即:DigiCert SHA2高保证服务器CA. DigiCert High Assurance EV Root CA中的其他证书应该没问题 该服务器还支持有限的TLS协议。 只有SSL3(这是不安全的和TLS 1.0支持) 如上所述,我可以通过curl来获取文件。 当使用wget时,只有在明确设置SSL协议并提供ca cert证书链文件(wget –secure-protocol = TLSv1 -ca-certificate =“path / to / ca-chain-file.pem” //path/to/image.jpg ) 现在我试图完成两件事情,但都失败了: 用我的操作系统注册ca-cert(本地MAC,服务器在Ubuntu上运行) 在我的节点应用程序中提供GET请求时提供这些额外的configuration: request.get({ url: location, encoding: 'base64', agentOptions: { ca: fs.readFileSync('path/to/ca-chain-file.pem'), secureProtocol: 'TLSv1_method' } }) 请帮忙

NodeJS响应需要很长时间

我提出了一个简单的请求,但有时需要很长时间才能得到答案。 Chome DevTools告诉我,TTFB(Time To First Byte)通常超过10秒。 这是我的查询。 我使用express和mysql模块。 module.getSessionToken = function(request, response) { bddConnection.query( `SELECT id, firstname, lastname FROM users WHERE password = "${request.query.password}" AND mail = "${request.query.mail}"`, function(err, res) { if (err) throw err; response.send(res); } ); }; 这是我的服务器有这个问题的唯一要求。 其他人运作良好。