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 🙏

© 2025 – Pkg Stats / Ryan Hefner

roxy

v0.2.1

Published

A proxy for JSONP requests to RESTful APIs

Readme

Roxy

Roxy is a simple proxy intended for use with javascript frameworks to enable RESTful inter domain requests. Why do we need a proxy?

JSONP requests that enable inter-domain AJAX requests do no allow for PUT,POST,DELETE,PATCH methods to be used. Additionally JSONP does not allow you to set additional headers in the request.

The use of headers and these other HTTP request methods is essential to utilising the RESTful methodology to its full extent.

Why use node.js?

Since this Proxy is intended for use with client side javascript frameworks, we thought it would be useful to keep the proxy code in the same language to make it easy for the users to contribute/alter where they see fit.

Requirements

  • node.js
  • qs (querystring npm library)

Installing node.js on OS X:

brew update
brew install node

To install the require npm package type:

npm install qs

Configuring to work with NGINX (nginx.conf):

server {
    listen 80;
    server_name ms;
    root /WEB_ROOT;
    index index.html;
    error_page 404 index.html;

    location /roxy {
        proxy_pass    http://127.0.0.1:3000/;
    }
}

Node.js script must also be run with:

node roxy.js

Usage

Send a JSONP AJAX request to roxy where the url is as so

http://localhost/roxy/remote/path

Where 'localhost' is the server running the node.js file. And roxy is the location configured in the nginx.conf

remote/path denotes the path you are trying to retrieve/modify from the RESTful API

Along with this also pass any parameters (post data) you wish to send to the remote server. Also including the special _request parameter this will carry configuration data to Roxy.

_request = {
    url: 'http://restful.api:8080',
    method: 'POST',
    headers: {
        Authorization: 'OAuth 0123456789abcdef0123456789abcdef'
    }
}

This special parameter will connect Roxy to the specified server (restful.api) using the specified protocol (http) on port (8080).

The method (POST) denotes the HTTP action you wish to perform and any headers set will also be forwarded.

jQuery example:

jQuery.ajax({
    url: http://localhost/roxy/remote/path,
    data: {
        _request = {
            url: 'http://restful.api:8080',
            method: 'POST',
            headers: {
                Authorization: 'OAuth 0123456789abcdef0123456789abcdef'
            }
        },
        text1: 'This is some data you want to send',
        text2: 'This is some more data wish to send'            
    },
    dataType: 'jsonp',
    success: function(data) {
        alert(data);
    }
});