Hou, a simple toolkit for Node.js

For the purpose of providing a web service to a Node.js project to users, we may require a small middleware to start an HTTP service to handle the HTTP requests.

Solution: Python

In python, we can use http.server to start a web service.

python3 -m http.server

This command will return the corresponding files based on your requests.

Unfortunately, this does not work for a Node.js project. We may visit http://example.com/foo, but the real target is /index.html. This will raise an unexpected 404 error.

Solution: Nginx

We can also configure Nginx and could get a perfect result.

The configuration file is pretty easy

server {
listen 80;
server_name example.com;

root /path/to/the/project;
index index.html;

location / {
try_files $uri $uri/ /index.html =404;
}
}

However, the steps are kind of too much.

Solution: Hou

Recently, I prepared a small script based on golang. It will do the similar job as the behavior above in Nginx, but much smaller and efficacy.

Github:https://github.com/argcv/hou

Install or update from source

If you just wish to use it. Please just use the following command:

go get -v github.com/yuikns/hou

If you wish to make contributions to the repo. You can use the following script.

curl -L https://bit.ly/2KzJeU6 | bash

Docker image

If you are using Chinese network, you may use aliyun’s mirror: registry.cn-zhangjiakou.aliyuncs.com/yuikns/hou

Otherwise, you may use yuikns/hou from dockerhub.

Since the logic is very easy and the dependencies on very few packages, this image is only 6MB in the current.

Example of using Docker through docker-compose

A docker-compose.yml file is a YAML file that defines how Docker containers should behave in production.

Here is an example to use Hou easily

version: '3'

services:
hou:
image: yuikns/hou:latest
ports:
- 6789:6789
restart: always
volumes:
# /app is the default root of the service
- ./dist:/app
# command: ["-d", "-v" ] # other options

Benchmark

Here is a simple benchmark between hou and nginx.