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

@threebow/axis

v10.3.0

Published

A heavily opinionated and expressive web framework for node.js

Downloads

110

Readme

Axis

Introduction

Axis is an expressive, unopinionated, and minimal web framework for Node.js. The goal of Axis is to stay out of your way, while lessening the amount of code you need to write for a clean, functional web application. It is built upon a collection of popular libraries and much lower-level frameworks which synergize very well together, as well as some extra magic to handle routing and database stuff.

The combination of these libraries, utilities, and tools allow developers to make complex web applications very quickly and efficiently.

What it uses

  • Express: main backend framework for web
  • Objection.js and Knex: ultra-lightweight ORM and query builder
  • Passport: for authentication
  • Your choice of view engine

How to use

There is no proper documentation for now, as this was mainly intended for me to use as I had noticed I was writing the same backend code over and over for every app I made. However, you should be able to look at the Todo demo project here, it's commented and everything so you should be able to find what you want to do.

Here's a basic example nonetheless:

Bootstrapping

const {App} = require("axis"),
	  path = require("path");

require("dotenv").config();

let app = new App({
	viewEngineName: "pug",
	viewEngine: require("pug"),
	viewDir: path.join(__dirname, "views"),

	session: {
		secret: process.env.APP_SECRET,
		resave: false,
		saveUninitialized: false
	},

	publicDir: path.join(__dirname, "public"),

	controllers: path.join(__dirname, "./controllers"),
	database: require("./database"),
	routers: [
		require("./routes/web")
	]
});

app.listen(process.env.APP_PORT, () => {
	console.log(`Listening on ${process.env.APP_PORT}`);
});

Routing

const {RouteGroup} = require("axis");

module.exports = ({PagesController, TodoController}, {Todo}) => {
	let app = new RouteGroup("/");

	app.get("/", PagesController.index);

	app.group("/todos", (group) => {
		group.get("/", TodoController.index);
		group.get("/:id", TodoController.view).bind("id", Todo);
	});

	return app;
};

Controllers

const {Controller} = require("axis");

module.exports = class TodoController extends Controller {
	async index() {
		let todos = await this.models.Todo.query();
		return this.render("todos/index", {todos});
	}

	async view(todo) {
		return this.render("todos/view", {todo});
	}
};