# urout

> Fast, unopinionated, minimalist browser and server router

Latest version **2.0.5** (published 2021-06-14) · ISC license · 0 weekly downloads

## Install

```sh
npm install urout
pnpm add urout
yarn add urout
bun add urout
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.5 |
| Published | 2021-06-14 |
| First published | 2019-09-20 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 2 |
| Unpacked size | 32.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | Kethan Surana |
| Maintainers | kethan |
| Keywords | API, browser, router, express, urout |

## Links

- npm: https://www.npmjs.com/package/urout
- Repository: https://github.com/kethan/urout
- Homepage: https://github.com/kethan/urout#readme
- Issues: https://github.com/kethan/urout/issues
- npm.io page: https://npm.io/package/urout

## Dependencies (2)

- [trouter](https://npm.io/package/trouter.md) ^3.2.0
- [querystring](https://npm.io/package/querystring.md) ^0.2.1

## Alternatives

- [express-promise-router](https://npm.io/package/express-promise-router.md) — 736.1K weekly downloads
- [next-usequerystate](https://npm.io/package/next-usequerystate.md) — 29.8K weekly downloads
- [@bitkyc08/opencodex](https://npm.io/package/@bitkyc08/opencodex.md) — 4.6K weekly downloads
- [lynkr](https://npm.io/package/lynkr.md) — 575 weekly downloads
- [baremetal.js](https://npm.io/package/baremetal.js.md) — 42 weekly downloads

## Recent versions

- 2.0.5 (latest) — 2021-06-14
- 2.0.4 — 2021-06-13
- 2.0.3 — 2021-06-13
- 2.0.2 — 2021-06-12
- 2.0.1 — 2021-06-12
- 2.0.0 — 2021-06-10
- 1.0.8 — 2019-09-23
- 1.0.7 — 2019-09-23
- 1.0.6 — 2019-09-20
- 1.0.5 — 2019-09-20
- 1.0.4 — 2019-09-20
- 1.0.3 — 2019-09-20
- 1.0.2 — 2019-09-20
- 1.0.1 — 2019-09-20
- 1.0.0 — 2019-09-20

## README

# Universal Router

**Start developing server/browser apps in seconds** ✨

Fast, unopinionated, minimalist browser and server Router ;)

A router version of [`express`](http://expressjs.com/) built with [`polka`](https://github.com/lukeed/polka) and based heavily on [`trouter`](https://github.com/lukeed/trouter).

# Features

-   **Lightweight** - less than 1.7kb min+gzip
-   **No Dependency** - No Bloating. No external dependencies
-   **Node/Browser compatible code** - Use the same code for server and browser
-   **Express.js Middleware compatible** - Middleware support, including Express middleware you already know & love
-   **Express.js identical API** - Nearly identical application API & route pattern definitions

# Install

```
$ npm install --save urout
```

# Usage

Browser

```js
const urout = require("urout");
function getRouter({
	onError = (err, req, res) => {
		res.end(err);
	},
	onNoMatch = (req, res, next) => {
		res.end("no match");
	},
} = {}) {
	return new urout.Router({ onError, onNoMatch });
}

let res = {
	end: (chunk, cb) => {
		console.log(chunk);
	},
};

let app = getRouter();
let users = getRouter().get("/", (req, res) => {
	res.end("users!");
});
app.use((req, res, next) => {
	console.log("mid");
	next();
})
	.use("users", users)
	.get("/", (req, res) => {
		res.end("root");
	})
	.get("/err", (req, res) => {
		throw "e";
	});

app.handler({ method: "GET", url: "/" }, res);
app.handler({ method: "GET", url: "/err" }, res);
app.handler({ method: "GET", url: "/nomatch" }, res);
app.handler({ method: "GET", url: "/users" }, res);
```

Node.js

```js
const urout = require("urout");
const http = require("http");

class Server extends urout.Router {
	constructor(opts) {
		super(opts);
		this.server = opts && opts.server;
	}

	listen(port, err) {
		(this.server = this.server || http.createServer()).on(
			"request",
			this.handler
		);
		this.server.listen.apply(this.server, arguments);
	}
}

function getRouter({
	onError = (err, req, res) => {
		res.end(err);
	},
	onNoMatch = (req, res, next) => {
		res.end("no match");
	},
} = {}) {
	return new Server({ onError, onNoMatch });
}

let app = getRouter();
let users = getRouter().get("/", (req, res) => {
	res.end("users!");
});
app.use((req, res, next) => {
	console.log("mid");
	next();
})
	.use("users", users)
	.get("/", (req, res) => {
		res.end("root");
	})
	.get("/err", (req, res) => {
		throw "e";
	})
	.listen(3000);
```

Look for more usage in examples folder for node.js API server, express middleware and browser implementation.

# API

# License

MIT © Kethan Surana

---
_Source: https://npm.io/package/urout · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
