HTTP Hash Router
raw JSON →http-hash-router is a lightweight server-side routing utility for Node.js's native `http` module, built upon the `http-hash` package for pattern matching. It is currently at version 2.0.1 and appears to be a stable, mature package primarily designed for CommonJS environments, indicated by its `require` syntax in examples. While specific release cadence isn't published, its current version and historical usage patterns suggest a focus on stability rather than frequent feature updates. It provides a simple API to define routes using patterns (including parameters and splats) and associate them with request handlers. A key differentiator is its callback-based error handling, specifically designed to integrate directly into Node.js's HTTP server callback without introducing a complex middleware stack. It explicitly manages `404 Not Found` errors and provides a structured way to access URL parameters within handlers, making it suitable for minimalistic HTTP service implementations.
Common errors
error http-hash-router.expected.callback (runtime exception) ↓
router function, e.g., router(req, res, {}, onError);. This callback will receive any errors, including NotFoundError (for 404s), or will be passed to your route handler if no error occurred. error TypeError: HttpHashRouter is not a function (when using import) ↓
require() syntax: const HttpHashRouter = require('http-hash-router'); instead of import HttpHashRouter from 'http-hash-router';. Warnings
gotcha The `router` function (`router(req, res, opts, cb)`) explicitly *requires* a callback function as its fourth argument. Failing to provide one will immediately throw an `http-hash-router.expected.callback` exception. ↓
gotcha This package is designed for CommonJS (CJS) environments and primarily uses `require()`. While it might be usable in an ESM project via compatibility layers, direct `import` statements are not officially supported or demonstrated. Users should anticipate potential interop issues if integrating into modern ESM-only Node.js projects. ↓
gotcha Error handling is entirely callback-based, meaning errors (including 404 Not Found) are passed to the provided callback function, not thrown or handled by Promises. This contrasts with modern `async/await` patterns. ↓
Install
npm install http-hash-router yarn add http-hash-router pnpm add http-hash-router Imports
- HttpHashRouter wrong
import HttpHashRouter from 'http-hash-router';correctconst HttpHashRouter = require('http-hash-router'); - router.set wrong
router.add('/path', handlerFunc);correctrouter.set('/path', handlerFunc);
Quickstart
const http = require('http');
const HttpHashRouter = require('http-hash-router');
const router = HttpHashRouter();
router.set('/health', function health(req, res) {
res.setHeader('Content-Type', 'text/plain');
res.end('OK');
});
router.set('/greet/:name', function greet(req, res, opts, cb) {
res.setHeader('Content-Type', 'text/plain');
res.end(`Hello, ${opts.params.name}!`);
});
const server = http.createServer(function handler(req, res) {
router(req, res, {}, onError);
function onError(err) {
if (err) {
// Custom error serialization and response
res.statusCode = err.statusCode || 500;
res.setHeader('Content-Type', 'application/json');
if (err.type === 'http-hash-router.not-found') {
res.end(JSON.stringify({ error: 'Not Found', path: req.url }));
} else {
res.end(JSON.stringify({ error: err.message || 'Internal Server Error' }));
}
}
}
});
server.listen(3000, () => {
console.log('Server listening on http://localhost:3000');
console.log('Try visiting http://localhost:3000/health and http://localhost:3000/greet/world');
});