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 🙏

© 2026 – Pkg Stats / Ryan Hefner

koa-core-server

v1.1.7

Published

The koa server wrapper. That's all what you need to start build koa based server. ---

Readme

KOA-CORE-SERVER

The koa server wrapper. That's all what you need to start build koa based server.

SETUP

  • npm install --save koa-core-server

HOW TO USE

Project structure should looks like this.

Project structure

  • server initialization
const Server = require('koa-core-server'); // Path to koa-core in node_modules
const path = require('path');

const routePath = path.join(__dirname, 'routers'); // dir where you routers live
const controllersPath = path.join(__dirname, 'controllers'); // dir where you controllers live
const dataAccessPath = path.join(__dirname, 'dataAccess'); // dir where you data access live
const server = new Server({
  routePath,
  controllersPath,
  dataAccessPath,
  clustering: {bool}, // by default is false, run you app with workers
  loadersStatus: {bool}, // by default false, show loader statuses
});

server.use((ctx, next) => { // that how you can connect you middleware
  console.log('hello from middleware');
  next();
});

server.start();
  • router
const Router = require('koa-router');

module.exports = class HelloRouter extends Router {
  constructor() {
    super();
    this.name = 'Hello router';  // optional if not define will be used file name"
    this.rootPath = null; // optional by default will be using first part of the file name `hello.router -> /hello`
    this.helloController = this.injector.get('helloCustomName'); // get controller from injector controller name defining in controller class via 
    //  `this.name` or if not define use controller file name with postfix in camel case notation `user.controller -> userController`
  }

  load() {
    this.get('/', this.helloController.getHello.bind(this.helloController)); // define you routers here
    this.get('/by', this.helloController.sayBy.bind(this.helloController)); // define you routers here
    return this; // return this is required in `this` lives you routers
  }
};
  • controller
module.exports = class HelloController {
  constructor() {
    this.name = 'helloCustomName'; // controller name will be set in controller injector and you can find controller by this name in injector or use 
    // controller file name with postfix in camel case notation `user.controller -> userController`
    this.helloDataAccess = this.injector.get('helloDataAccess'); // get  you data access for this controller by name defining in data access class `this.name` or use file name in camel case notation with postfix `hello.dataAccess -> helloDataAccess` 
  }

  async getHello(ctx, next) { // controller methods uses in routers should be defined like plain koa function with async and ctx and next like parameters
    ctx.response.body = await this.helloDataAccess.getHello();
  }

  async sayBy(ctx, next) { // controller methods uses in routers should be defined like plain koa function with async and ctx and next like parameters
    ctx.response.body = await this.helloDataAccess.getGoodBy();
  }
}
  • dataAccess
module.exports = class HelloDataAccess {
  getHello() { // this methods will be using in controller
    return Promise.resolve('hello');
  }

  getGoodBy() { // this methods will be using in controller
    return Promise.resolve('good by');
  }
}

For more detailed example look at server example

TODO

  • add load packages from yarn
  • add only read preferences to injectors
  • add tests
  • add auto publish via some CI by master hook