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

eagles

v1.0.0

Published

http server framework providing shortcuts

Downloads

3

Readme

eagles

Eagles is a HTTP server API that aims to provide shortcuts in creating server responses.

Code Fellows 401 JS assignment by Miranda Raymond, Natalie Chow, and Aaron Filson

Installation

Install Eagles from your command line:

npm install eagles

Getting Started

The backbone of Eagles is comprised of a HTTP server creator and a router. Here is the simplest way to implement Eagles:

const eagles = require('eagles');

var router = new eagles.Router();
eagles.createServer(router.route());

This segment of code sets up a HTTP server listening at port 3000, and a router for you to add routes to. For customization of the server and methods to add routes, refer to the sections below.

API Reference

HTTP Server

Creating a Server

Eagles provides an easy way to create an up-and-running server:

eagles.createServer(requestListener[, port])

.createServer() returns a http.Server object. Like the Node.js HTTP interface, the method takes a requestListener function which takes the following form:

function (request, response) { }

The requestListener is automatically added to the HTTP request event. To dynamically generate the listener, we recommend using the Eagles' router function.

.createServer() also takes an optional parameter for the hosting port number. It is defaulted to 3000 unless otherwise specified.

Router

Initiate Router

Create an instance of Eagles' router by calling the constructor:

var router = new eagles.Router();

Saving the instance allows you to add routes and referencing it in your server's requestListener.

Set Up Routes

Five different methods (.get(), .post(), .put(), .patch(), .delete()), corresponding to five different REST verbs, are available for each router instance. Each method takes a URL and a request listener function as its parameters. The request listener follows the same format as a HTTP server requestListener, with the same list of methods available for the request and response objects.

Here is a simple example of routing a GET request to /hello:

var router = new eagles.Router();
router.get('/hello', function(req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('world');
  res.end();
});

Visit the next section for Eagles' helper methods for writing server response.

Parameters in URL

You can set up your route such that parameters can be passed through the URL. Name the variables as you declare the URL and precede each with a colon (:). The parameters can then be accessed as properties of a param object, which will be the third argument in the request listener function.

router.get('/greet/:time/:name', function(req, res, param) {
  eagles.resHead(res, 200, 'plain');
  eagles.resBody(res, 'good ' + param.time + ', ' + param.name);
  res.end();
});

// GET /greet/morning/felicia
// will yield the response 'good morning, felicia'

From this example, any GET requests with a URL that starts with /greet will be matched to this pattern. If there are more parameters than the setup specification, the excess parameters will be ignored. However, if there are less parameters, the lacking fields will evaluate to undefined.

Parameters in Query String

Another way to pass in parameters is through the query string. The parameters are parsed and become accessible as properties of the third argument (query) in the request listener function. Be sure to end the URL with a question mark (?) to indicate the expectation of a query string. Currently, Eagles only support one parameter in the query string.

router.get('/sayhi?', function(req, res, query) {
  eagles.resHead(res, 200, 'plain');
  eagles.resBody(res, 'hi there ' + query.name);
  res.end();
});

// GET /sayhi?name=felicia
// will yield the response 'hi there felicia'

If there is no query string given in the request, query will be an empty object and subsequently its properties will be undefined.

Dynamic Routing

Any routes you have or will set up are available in your router instance. Calling router.route() will search for and run the function you've set up for that instance.

Response Helper

Typing out res.writeHead() with status code and content type over and over again can be hideous.

Here is a list of response helper functions available with Eagles. By passing in the res object as reference and parameters for status code and content type, Eagles provides an easy way to do the same task. There are also helpers for writing body contents.

Status Code: .status()

.status() sets the response status code:

eagles.status(res, code);

where code should be a 3-digit HTTP status code.

Content Type: .contentType()

.contentType() sets the type of the response body:

eagles.contentType(res, type);

type should correspond to the MIME type of the content. Use full MIME type identifier (e.g. text/html) or Eagles' shortcut for common content types:

| Shortcut | MIME Type | | -------- | --------- | | 'plain'| 'text/plain' | | 'html' | 'text/html' | | 'xml' | 'text/xml' | | 'json' | 'application/json' | | 'octet'| 'application/octet-stream' | | 'form' | 'multipart/form-data' | | 'jpg' | 'image/jpeg' | | 'png' | 'image/png' |

Use both .status() and .contentType() to write the header:

router.get('/hello', function(req, res) {
  eagles.status(res, 200);
  eagles.contentType(res, 'plain');
  ...
});

Both methods are chainable, this code does the same things as above:

router.get('/hello', function(req, res) {
  eagles.status(res, 200).contentType(res, 'plain');
  ...
});

Writing the Header in One Go: .resHead()

Combining .status() and .contentType(), .resHead() is an even faster way to write header and it takes the following format:

eagles.resHead(res, code, type);

where type takes the same shortcuts as described in the content type section above.

Writing Response Body Data: .resBody()

Writing the response content is straightforward.

eagles.resBody(res, content);

Here are .resHead() and .resBody() in action:

router.get('/hello', function(req, res) {
  eagles.resHead(res, 200, 'plain');
  eagles.resBody(res, 'world');
  res.end();
});

Both methods are again chainable, so this snippet is equivalent to the one above:

router.get('/hello', function(req, res) {
  eagles.resHead(res, 200, 'plain').resBody(res, 'world');
  res.end();
});

Sending File: .sendFile()

eagles.sendFile(res, filepath);

Nothing will get through as the response if filepath is invalid. Be sure to specify in the header a correctly content type before calling .sendFile():

router.get('/helloFile', function(req, res) {
  eagles.resHead(res, 200, 'html');
  eagles.sendFile(res, 'path/to/file.html');
});

Note that res.end() is not needed when using .sendFile(), as the read stream will close after all the data has been piped through.

Sending JSON: .sendJSON()

eagles.sendJSON(res, input);

input can be a JavaScript object, array, or string, and will be stringified as when it passes through to response. input can also be a filepath. If the path leads to a JSON file, the content of that file will be used to populate the response. If the path does not lead to a file or if the file does not have the JSON extension, the filepath will be used as the response.

Unlike other response helper methods, .sendJSON() defaults to send a 200 status code, set the content type to application/json, and automatically end the response once the data is through. So when using .sendJSON, this is all you need within the request listener:

router.get('/helloJSON', function(req, res) {
  eagles.sendJSON(res, {msg: 'hello world'});
});

router.get('/helloJSON2', function(req, res) {
  eagles.sendJSON(res, '/some/filepath.json');
});

Note that you can overwrite the status code with a header method (e.g. .status()).