node package manager
Love JavaScript? Your insights can make it even better. Take the 2017 JavaScript Ecosystem Survey ยป



lean HTTP wrapper for node.js that makes unit testing your HTTP API's a bit less rough.


npm install requestah

Basic Usage

var r = require('requestah')(80); // Set the port for future requests

// Basic HTTP GET:
r.get('/users', function(res) {
	if (res.statusCode === 200) { console.log(res.body); }

// HTTP POST with data:'/users', {name: "John Doe"}, function(res) {
	if (res.statusCode === 200) { console.log(res.body); }

// External HTTP GET:
r.get('', function(res) {
    if (res.statusCode === 302) { console.log("We got redirected to " + res.headers.location); }

Advanced usage

// HTTP GET with querystrings passed as object
r.get('/users', {ageMin: 30, ageMax: 50} function(res, dbg) {
	if (res.statusCode === 200) { console.log(res.body); }

// HTTP GET with querystrings passed in path - performs exactly the same request as above would do
r.get('/users?ageMin=30&ageMax=50', function(res, dbg) {
	if (res.statusCode === 200) { console.log(res.body); }

// HTTP DELETE with a header for only this request
r.del('/users/john', {headers: {apikey: "verySecretKey"}}, function(res) {
	if (res.statusCode === 204) { console.log(res.body); }

// Set a fixed HTTP header for all future requests. Helpful for authentication 
r.setHeader('apikey', 'b4080ca70d5617...');

// HTTP PUT with data & headers:
r.put('/users/john', {name: "Jane Doe", headers: {adminkey: "IGOTADMINRIGHTS"}}, function(res, req) {

	if (res.statusCode === 204) { console.log(res.body); }
	console.log(req.params); // => params: {name: "Jane Doe"}
	// Note that both the above set apikey and the per-request adminkey have been sent in the request:
	console.log(req.headers); // => headers: {apikey: 'b4080ca70d5617...', adminkey: 'IGOTADMINRIGHTS'}

// HTTP POST with enforced Content-Type:'/users', {name: "John Doe", type: "form"}, function(res, req) {
	console.log(req['Content-Type']); // => 'application/json'

// Activate debug mode - future requests will not be performed. Only request options are returned:

// Check out the available debug information'/users', {name: "John Doe", type: "form"}, function(res, req) {
	console.log(res); // res => false
     req => {
	    port: 80,
	    method: 'POST',
	    path: '/users',
	    headers: {apikey: 'b4080ca70d5617...', adminkey: 'IGOTADMINRIGHTS'},
	    'Content-Type': 'application/json'
	    params: {name: "John doe"},
	    parsedParams: '{"name": "John Doe"}',



  • get(path, data, callback)

  • post(path, data, callback)

  • put(path, data, callback)

  • del(path, data, callback)

    • path - [REQUIRED] - The URL to fetch. Can be either relative to root, ie. /users or but also an full path,
    • data - [OPTIONAL] - The data to be sent along with the request. Is appended automatically as a querystring to the path for HTTP GET requests, or converted into JSON automatically for POST/PUT/DELETE.
      • headers - [OPTIONAL] - The eventual headers to send along with the requests. Does overwrite any previously set fixed headers
      • type - [OPTIONAL] - A way to force content-type -encoding of the request to be either form application/x-www-form-urlencoded, or json (application/json)
    • callback - [REQUIRED] - The callback to be fired once the request is complete. Returns two arguments: response & request
      • response - The actual node response object. False if in debug mode. Please visit the [official node.js documentation] for full documentation :
      • request - The arguments used to create the request. Useful for debugging and the only argument returned if in debug mode.
  • setFixedHeader(key, value) - Sets a fixed header to be included with all future requests. Useful to set HTTP Auth headers.

  • setDebug(bool) - Activates debugging, which means that no actual HTTP requests will be perfomed. Watch the second argument (request) in the callbacks for detailed debug information.

Checkout the tests in test/test-main.js for actual examples and usecases.


See LICENSE file.

Copyright (c) 2012 Joakim B