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

real-fast-server

v1.0.6

Published

A super fast in depth framework like express, but way better and developed over a weekend

Downloads

18

Readme

Real Fast Server (HTTP Framework)

A lightweight server/router combo built on top of node HTTP. It provides some conveniences like JSON body parsing, static routing, and a simple response API without any feature bloat.

Contents

Getting started

Real-Fast-Server on NPM

npm install real-fast-server

Here's how you would get up and running with a server on port 3000 with GET and POST routes.

const server = require('real-fast-server');
const router = new server.Router;

router
  .get('/', (req, res) => res.send('Hello World!'))
  .post('/api/test', (req, res) => {
    res.send('Successfully posted' + JSON.stringify(req.body));
  });

const app = server.start(router).listen(3000);

API

Server

server.start(router)

This method takes in a router object and returns a node http server. The router needs to have a route method that knows how to handle the http req and res parameters. The server is where the JSON parsing middleware lives, but it comes built-in, no batteries required!

const app = server.start(router);
app.listen(3000);

server.Router()

Constructor for the router object. Must be called with the new keyword.

const router = new server.Router();

app.use(function(req, res))

Adds a middleware function to the running server. This function runs before requests are handled and should be used to perform any transforms or processing you want to do for every request. For example, you could create middleware that would parse query strings into an object and add it as a property of req.

const app = server.start(router);
app.use((req, res) => req.query = queryStringParser(req));
app.listen(3000);

req.body

If JSON was sent in the request, this field will be automatically populated by our JSON parsing middleware. It will be of type object if populated and null otherwise.

res.send(message, [contentType])

Built-in middleware adds this function to all response objects. This will automatically handle writing headers and closing the connection to simplify writing responses. It can detect JSON, HTML, and plaintext responses. Optional second parameter can be used to override the autodetect and use a specific Content-Type.

router.post('/index', (req, res) => {
  // Will use Content-Type application/json
  res.send({ 'hello': 'world' });
});

router.get('/test' (req, res) => {
  // Will use Content-Type text/plain
  res.send('Hello world!');
});

Router

router.get(path, callback(req, res))

Adds a GET route that handles requests with the passed-in callback. Returns the router to allow for method chaining.

router.get('/index', (req, res) => {
  res.send('Hello world!');
});

router.post(path, callback(req, res))

Adds a POST route that handles requests with the passed-in callback. Returns the router to allow for method chaining. See router.get docs for example usage.

router.put(path, callback(req, res))

Adds a PUT route that handles requests with the passed-in callback. Returns the router to allow for method chaining. See router.get docs for example usage.

router.patch(path, callback(req, res))

Adds a PATCH route that handles requests with the passed-in callback. Returns the router to allow for method chaining. See router.get docs for example usage.

router.delete(path, callback(req, res))

Adds a DELETE route that handles requests with the passed-in callback. Returns the router to allow for method chaining. See router.get docs for example usage.

router.static(pathString)

Takes a relative or absolute path and creates routes for all the filenames found in that folder. Returns an ES2015 promise just in case anything else you're doing is contingent upon those routes being created. (Routes that are created at calltime, as well as changes made to the file structure after the method is called, will not be reflected in routes).

router.static('./public');

router.route(req, res)

This is the method the server should call when a request is made. It routes to entries on the routing table using the method and url properties of the req and runs the callback. Generally you want to be passing this in when you create your server.

See the Getting Started Guide for an example of where you use this.

router.routes

Object that holds the current routing table. Here's what it might look like for the code in the Getting Started Guide.

{
  'GET': {
    '/': (req, res) => res.send('Hello World!')
  },
  'POST': (req, res) => {
    res.send('Successfully posted' + JSON.stringify(req.body));
  },
  'PUT': {},
  'PATCH': {},
  'DELETE': {},
  '404': (req, res) => req.send('404 Not Found')
}

We throw in a 404 for free, but you're welcome to overwrite it!

Writing Middleware

Real-Fast-Server is extensible and allows you to write your own middleware that performs computations on the req and res objects of a request before they are handled. Simply write a function that takes in a req and res and mutates them in whatever way you require.

Example:

myAwesomeMiddleware = (req, res) => {
  req.someUsefulProp = someCoolFunction();
};
app.use(myAwesomeMiddleware);
// All req objects will now have someUsefulProp

Dependencies

"devDependencies": {
  "chai": "^3.4.1",
  "chai-http": "^1.0.0",
  "eslint": "^1.10.3",
  "gulp": "^3.9.0",
  "gulp-eslint": "^1.1.1",
  "gulp-mocha": "^2.2.0",
  "mocha": "^2.3.4"
},
"dependencies": {
  "mime-types": "^2.1.9"
}

Authors

This server/router was written by Erika Hokanson, Logan Tegman, Jose Tello, and James Vermillion for the JavaScript 401 course at Code Fellows.

License

This project is licensed under the terms of the MIT license.