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

node-pong

v1.2.5

Published

Provides an automated answer on ``/ping`` endpoint. Works on multiple ports.

Downloads

67

Readme

node-pong

node-pong

Summary

Every time a developer wants to check if a site/API is up and running, usually a PING is made on a IP and PORT. Sometimes I want to check if my service is up on a determined PORT, or even if my request is going through the firewall/router/switch the way I expect.

So I wanted to have a simple project that I'm able to quick use it for testing purposes.

This is a simple project that provides API endpoints that answers to HTTP requests.

Project Name

The name is simply inspired on the PING-PONG interaction, NOT on the PONG Game!

Install

npm install node-pong

Use

Create a Node.js (e.g. nodePongTest.js) file and insert:

let nodePong = require('node-pong');

or type this on your terminal:

echo "let nodePong = require('node-pong');">nodePongTest.js

Run

node nodePongTest.js

and you should see the server running:

server running on port 13420

Main endpoint

/ping

The main endpoint for all the action on this package is /ping. Every port that is provided to be listened by the server will have this endpoint.

Check response

Now you only have to check if the server is responding using any language/program you want. Example:

curl http://localhost:13420/ping

and you should see a response (drum roll)

pong

Other response formats

Since version 1.2.0 it's possible to get the response in other format than plain text.

  • HTML
  • JSON
  • XML

HTML

curl -H "Accept: text/html" http://localhost:13420/ping
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>node-pong response</title>
</head>

<body>
    <h1>pong</h1>
</body>

</html>

JSON

curl -H "Accept: application/json" http://localhost:13420/ping
{
    "headers": {
        "host": "localhost:13420",
        "user-agent": "curl/7.54.0",
        "accept": "application/json"
    },
    "method": "GET",
    "url": "/ping",
    "body": "{\"answer\": \"pong\"}"
}

XML

curl -H "Accept: application/xml" http://localhost:13420/ping
<?xml version="1.0" encoding="utf-8" ?>
<answer>pong</answer>

Multiple HTTP ACCEPT HEADERS

We want just one kind of response, so IF multiple ACCEPT headers are found, the FIRST one on the following order will be the response:

  1. JSON
  2. HTML
  3. XML

In the case of no header is identified or is incorrect, the plain answer pong will be given.

Additional endpoints

/ports

If you want to check which ports your server is listning to, than use this endpoint.

curl http://localhost:13420/ports
["13420"]

Configuration file

On version 1.1.0 a configuration file was added. You can copy it from the node_modules/node-pong directory:

cp node_modules/node-pong/node-pong.json .

or create it manually:

node-pong.json

{
    "_comment": "##########################\n\nThis is the configuration file for node-pong.\n\nports: array of ports for node-pong listen to. If no port is informed, or no node-pong.json file is found, it will listen on the default port 13420.\n\nserverMessage: should be a message that is shown on the console when the server is listening on the desired port, on the form of:\n\nserverMessage: port\n\n##########################\n",
    "ports": ["13420"],
    "serverMessage": "The server is running on port: "
}
  • _comment: The message you want to show on the console;
  • ports: An array of ports that the server must listen to.
    • You can specify one by one or a range of ports;
    • Range will not check if the startPort is bigger than the endPort, so you must supply the range in the correct order. E.g.:
      • correct: 10-20;
      • wrong: 20-10;
    • NaN will just throw a "-> not a valid port" message on the console, but will not throw any error or interrupt other listening ports;
  • serverMessage: The message shown in the console when the server is started. It'll be one for each listened port;

NOTE1: If no configuration file is found or if the name is not correct (node-pong.json), than the server will be started just like on version 1.0.0, listening on the default port 13420.

NOTE2: As of one of my goals it to have the fewer dependencies possible, I opted for use the configuration file in json format, not on YAML or any other.

Goals

Provide a simple API able to answer to HTTP requests, enabling our project to:

  • Provide a default API endpoint "/ping" on a predefined default port;
  • Respond to ping requests on a default port;
  • Respond with a default answer "PONG";
  • Provide different type of responses other than the default plain text (HTML, JSON, XML)
  • Fewer dependencies as possible or no dependencies at all
  • Implement in-memory list of ports, with or without file persistence, for dynamic project configuration;
  • OPTIONAL: respond to ping requests on several ports;
  • OPTIONAL: respond with a customized answer on the default port;
  • OPTIONAL: respond with a customized answer on several different ports;

TODO

  • Implement every OPTIONAL goal described above;
  • Create tests using Mocha or another framework;
  • Implement a continuous delivery process;

Release notes

1.2.5

  • Added a simple Mocha test for testing /ping on the default port. Test every response type (plain, json, html and xml);
  • Also test the /ports endpoint;
  • fixed a bug when no header for "Accept" was defined, the request crashed the server;
  • Added close() function to close server;
  • jumped to this version number because of my npm not publishing correctly. Ignore versions 1.2.1 through 1.2.4.

1.2.0

  • Added "/ports" endpoint to check which ports the server is listening to;
  • Response in multiple formats based on HTTP headers (html, json, xml)

1.1.1

  • Fixed loading node-pong.json from current dir(./), now using process.cwd();
  • Goals updated - added dynamic port configuration wish;
  • Added more keywords for the package;

1.1.0

  • Added the ability of listening on multiple ports;
  • Added the ability of custom "server running" message;

1.0.1

  • Fixing README and deploy error;

1.0.0

  • It's the MVP for this package;
  • Simplest implementation ever;
  • no dependencies;
  • no logs;
  • no tests;
  • no parameters for start listening on a different port;