npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@playding/request-debug

v0.4.1

Published

Library to assist with debugging HTTP(s) requests made by the request module.

Downloads

14

Readme

request-debug Build status npm package

This Node.js module provides an easy way to monitor HTTP(S) requests performed by the request module, and their responses from external servers.

Usage

Basic usage is to require the module and call it, passing in the object returned by require('request'):

var request = require('request');

require('request-debug')(request);

This will set up event handlers on every request performed with the request variable from this point.

You can also specify a function to handle request or response data:

require('request-debug')(request, function(type, data, r) {
    // put your request or response handling logic here
});

If you specify your own handling function, r will be the Request instance that generated the event, and type will be one of the following values:

  • request - Headers were sent to the server and will be included as data.headers. data.body may also be present for POST requests.

  • response - Headers were received from the server and will be included as data.headers. Note that request only buffers the response body if a callback was given, so it will only be available as data.body if the initial call to request included a callback.

  • redirect - A redirect status code (HTTP 3xx) was received. The data object will have properties statusCode, headers, and uri (the address of the next request).

  • auth - A HTTP 401 Unathorized response was received. Internally, request handles this like a redirect, so the same properties will be available on the data object.

You can use the data.debugId parameter to match up requests with their responses and other events.

The default handling function writes the data to stderr in Node's JSON-like object display format. See the example below for more details.

To disable debugging, call request.stopDebugging() (this function only exists if debugging has already been enabled). Any requests that are in progress when stopDebugging() is called will still generate debug events.

Example

var request = require('request');

require('request-debug')(request);

// digest.php is example 2 from:
// http://php.net/manual/en/features.http-auth.php

request({
    uri  : 'http://nylen.tv/digest.php',
    auth : {
        user : 'admin',
        pass : 'mypass',
        sendImmediately : false
    },
    rejectUnauthorized : false,
}, function(err, res, body) {
    console.log('REQUEST RESULTS:', err, res.statusCode, body);
});

Unless you provide your own function as the second parameter to the request-debug call, this will produce console output similar to the following:

{ request:
   { debugId: 1,
     uri: 'http://nylen.tv/digest.php',
     method: 'GET',
     headers: { host: 'nylen.tv' } } }
{ auth:
   { debugId: 1,
     statusCode: 401,
     headers:
      { date: 'Mon, 20 Oct 2014 03:34:58 GMT',
        server: 'Apache/2.4.6 (Debian)',
        'x-powered-by': 'PHP/5.5.6-1',
        'www-authenticate': 'Digest realm="Restricted area",qop="auth",nonce="544482e2556d9",opaque="cdce8a5c95a1427d74df7acbf41c9ce0"',
        'content-length': '39',
        'keep-alive': 'timeout=5, max=100',
        connection: 'Keep-Alive',
        'content-type': 'text/html' },
     uri: 'http://nylen.tv/digest.php' } }
{ request:
   { debugId: 1,
     uri: 'http://nylen.tv/digest.php',
     method: 'GET',
     headers:
      { authorization: 'Digest username="admin", realm="Restricted area", nonce="544482e2556d9", uri="/digest.php", qop=auth, response="e833c7fa52e8d42fae3ca784b96dfd38", nc=00000001, cnonce="ab6ff3dd95a0449e990a6c8465a6bb26", opaque="cdce8a5c95a1427d74df7acbf41c9ce0"',
        host: 'nylen.tv' } } }
{ response:
   { debugId: 1,
     headers:
      { date: 'Mon, 20 Oct 2014 03:34:58 GMT',
        server: 'Apache/2.4.6 (Debian)',
        'x-powered-by': 'PHP/5.5.6-1',
        'content-length': '27',
        'keep-alive': 'timeout=5, max=100',
        connection: 'Keep-Alive',
        'content-type': 'text/html' },
     statusCode: 200,
     body: 'You are logged in as: admin' } }
REQUEST RESULTS: null 200 You are logged in as: admin

Compatibility

Tested with Node.js versions 0.8.x, 0.10.x, and 0.11.x on Travis, and a bunch of different request versions.

Does not work with request versions older than 2.22.0 (July 2013). Tests don't start passing until version 2.28.0 (December 2013).