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

@pct-org/pop-api

v0.9.0

Published

The base modules for popcorn-api

Downloads

18

Readme

pop-api

Build Status Coverage Status Dependency Status devDependency Status Conventional Commits

Features

The pop-api project aims to provide the core modules for the popcorn-api project, but can also be used for other purposes by using middleware.

  • Cli middleware for reading user input with commander.js.
  • Database middleware for connection to MongoDB through mongoose.
  • Logging of routes and other information using winston.
  • Uses express under the hood with:
  • Interface for registering routes for express.
  • Data Access Layer (DAL) class for standard CRUD operations.
  • Route controller to handle routes for your content.

Installation

 $ npm install --save pop-api

Documentation

Usage

For your basic setup you have to create a controller which will handle the routes. Your controller needs to extend from the IController interface to implement the registerRoutes method which will be called during the setup.

The route controller below will be created with a constructor which takes an object as the parameter. This example will register a GET /hello route and sends a JSON object as a response with a greeting to the name provided by the object from the constructor.

// ./MyRouteController.js
import { IController } from 'pop-api'

// Extend your route controller from the 'IController' interface.
export default class MyRouteController extends IController {

  // The constructor takes an object as the parameter.
  constructor({name}) {
    super()

    this.name = name
  }

  // Implement the 'registerRoutes' method from the 'IController interface.
  registerRoutes(router, PopApi) {
    router.get('/hello', this.getHello.bind(this))
  }

  // Router middleware to execute on the 'GET /hello' route.
  getHello(req, res, next) {
    return res.json({
      message: `Hello, ${this.name}`
    })
  }

}

To initialize the API we create an array of the route controllers and their constructor arguments we want to register. Then we just call the init method with the route controllers array, and the name and version your API (needed for the Cli). The API should run by default on port 5000.

// ./index.js
import { PopApi } from 'pop-api'
import MyRouteController from './MyRouteController'
import { name, version } from './package.json'

;(async () => {
  try {
    // Define the controllers you want to use.
    const controllers = [{
      Controller: MyRouteController,  // The controller to register.
      args: {                         // The arguments passed down to the
        name: 'John'                  // The additional arguments to pass to
                                      // your route controller.
      }
    }]

    // Initiate your API with the necessary parameters.
    await PopApi.init({                
      controllers,  // The controllers to register.
      name,         // The name of your API.
      version       // The version of your API.
    })
    // API is available on port 5000.
    // GET http://localhost:5000/hello -> { message: 'Hello, John' }
  } catch (err) {
    console.log(err)
  }
})()

License

MIT License