UNPKG

ninjs-request

Version:
208 lines (159 loc) 7.23 kB
'use strict' const _ = require('ninjs-lodash') const request = require('../') const _NAME = _.path.name(__filename) const _NS = `ninjs.request.test.${_NAME}` module.exports = { NAME: _NAME, NS: _NS, DIR: __dirname, FILE: __filename, run: run, info: info } function run(options) { info() } function info() { return console.log(request) } Convenience methods There are also shorthand methods for different HTTP METHODs and some other conveniences. request.defaults(options) This method returns a wrapper around the normal request API that defaults to whatever options you pass to it. Note: request.defaults() does not modify the global request API; instead, it returns a wrapper that has your default settings applied to it. Note: You can call .defaults() on the wrapper that is returned from request.defaults to add/override defaults that were previously defaulted. For example: //requests using baseRequest() will set the 'x-token' header var baseRequest = request.defaults({ headers: {'x-token': 'my-token'} }) //requests using specialRequest() will include the 'x-token' header set in //baseRequest and will also include the 'special' header var specialRequest = baseRequest.defaults({ headers: {special: 'special value'} }) request.put Same as request(), but defaults to method: "PUT". request.put(url) request.patch Same as request(), but defaults to method: "PATCH". request.patch(url) request.post Same as request(), but defaults to method: "POST". request.post(url) request.head Same as request(), but defaults to method: "HEAD". request.head(url) request.del / request.delete Same as request(), but defaults to method: "DELETE". request.del(url) request.delete(url) request.get Same as request() (for uniformity). request.get(url) request.cookie Function that creates a new cookie. request.cookie('key1=value1') request.jar() Function that creates a new cookie jar. request.jar() back to top Debugging There are at least three ways to debug the operation of request: Launch the node process like NODE_DEBUG=request node script.js (lib,request,otherlib works too). Set require('request').debug = true at any time (this does the same thing as #1). Use the request-debug module to view request and response headers and bodies. back to top Timeouts Most requests to external servers should have a timeout attached, in case the server is not responding in a timely manner. Without a timeout, your code may have a socket open/consume resources for minutes or more. There are two main types of timeouts: connection timeouts and read timeouts. A connect timeout occurs if the timeout is hit while your client is attempting to establish a connection to a remote machine (corresponding to the connect() call on the socket). A read timeout occurs any time the server is too slow to send back a part of the response. These two situations have widely different implications for what went wrong with the request, so it's useful to be able to distinguish them. You can detect timeout errors by checking err.code for an 'ETIMEDOUT' value. Further, you can detect whether the timeout was a connection timeout by checking if the err.connect property is set to true. request.get('http://10.255.255.1', {timeout: 1500}, function(err) { console.log(err.code === 'ETIMEDOUT'); // Set to `true` if the timeout was a connection timeout, `false` or // `undefined` otherwise. console.log(err.connect === true); process.exit(0); }); Examples: var request = require('request') , rand = Math.floor(Math.random()*100000000).toString() ; request( { method: 'PUT' , uri: 'http://mikeal.iriscouch.com/testjs/' + rand , multipart: [ { 'content-type': 'application/json' , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) } , { body: 'I am an attachment' } ] } , function (error, response, body) { if(response.statusCode == 201){ console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand) } else { console.log('error: '+ response.statusCode) console.log(body) } } ) For backwards-compatibility, response compression is not supported by default. To accept gzip-compressed responses, set the gzip option to true. Note that the body data passed through request is automatically decompressed while the response object is unmodified and will contain compressed data if the server sent a compressed response. var request = require('request') request( { method: 'GET' , uri: 'http://www.google.com' , gzip: true } , function (error, response, body) { // body is the decompressed response body console.log('server encoded the data as: ' + (response.headers['content-encoding'] || 'identity')) console.log('the decoded data is: ' + body) } ).on('data', function(data) { // decompressed data as it is received console.log('decoded chunk: ' + data) }) .on('response', function(response) { // unmodified http.IncomingMessage object response.on('data', function(data) { // compressed data as it is received console.log('received ' + data.length + ' bytes of compressed data') }) }) Cookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set jar to true (either in defaults or options). var request = request.defaults({jar: true}) request('http://www.google.com', function () { request('http://images.google.com') }) To use a custom cookie jar (instead of request’s global cookie jar), set jar to an instance of request.jar() (either in defaults or options) var j = request.jar() var request = request.defaults({jar:j}) request('http://www.google.com', function () { request('http://images.google.com') }) OR var j = request.jar(); var cookie = request.cookie('key1=value1'); var url = 'http://www.google.com'; j.setCookie(cookie, url); request({url: url, jar: j}, function () { request('http://images.google.com') }) To use a custom cookie store (such as a FileCookieStore which supports saving to and restoring from JSON files), pass it as a parameter to request.jar(): var FileCookieStore = require('tough-cookie-filestore'); // NOTE - currently the 'cookies.json' file must already exist! var j = request.jar(new FileCookieStore('cookies.json')); request = request.defaults({ jar : j }) request('http://www.google.com', function() { request('http://images.google.com') }) The cookie store must be a tough-cookie store and it must support synchronous operations; see the CookieStore API docs for details. To inspect your cookie jar after a request: var j = request.jar() request({url: 'http://www.google.com', jar: j}, function () { var cookie_string = j.getCookieString(url); // "key1=value1; key2=value2; ..." var cookies = j.getCookies(url); // [{key: 'key1', value: 'value1', domain: "www.google.com", ...}, ...] })