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

universal-node-router

v0.4.1

Published

a simple router that matches requests to corresponding backend controllers

Downloads

7

Readme

Build Status NPM Coverage Status GitHub version

SET UP

first install it with

npm install -S universal-node-router

then when configuring your server with node and express:

// import and assign the Route Object Constructor
let Router = require('universal-node-router');
// create new Object Router with context as parameter
let router = new Router(__dirname);
// tell Express to use it as target for your endpoints
app.use('/api', router.mapper('path/to/controllers/directory'));

It should be used to make it easier to go from writing your client to configuring your server. The url should match the name of your controller.

For example, /api/books will call the controller books.js.

Another case, /api/books/you/are/badass will call the controller books.js with :

req.params = {
  param1: 'you',
  param2: 'are',
  param3: 'badass'
}

Beware that controllers should be exported as modules, classes, functions, anything that is accessible through module.exports (or export default in TypeScript).

WRITING THE CONTROLLERS (without custom methods)

The targeted methods have predefined clear names :

typeOfRequest | nameOfMethod --- | --- GET(Collection) | list GET(One) | find POST | create PUT | update PATCH | (same name as above) DELETE | delete

WRITING THE CONTROLLERS (with custom methods)

You can use custom method names such as listAll for a collection or findOne for a single document. All you have to do is :

// declare an object with the following properties
let customConfig = {
  getAll: "list",
  getOne: "find",
  post: "create",
  update: "update",
  delete: "delete"
}
// when creating the Object Router, add a config file as a SECOND parameter
let router = new Router(__dirname, customConfig);

You can replace all of the methods, some of them or none. Property values must be strings.

The choice of DataBase should not impact the router, since the logic is written inside the controllers. If the controller is not written as it should, the request will throw an error explaining what you have to do.

CONTRIBUTING

If you want to help with anything, unit tests, methods... Submit a pull request and we'll discuss ;-)

You can also post issues if I ever miss something.

IN DEVELOPMENT :

  • [ ] Cannot read the folder resulting from tsc because of the .d.ts files.
  • [ ] GlobalModulesIndexer - make sure the correct index.js is imported
  • [ ] A webpack plugin for modern projects to allow dynamic imports