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

deliver-or-else

v1.0.0

Published

Serves local files from the server unto the client in the form of a Promise.

Downloads

11

Readme

deliver-or-else

This npm module is used to deliver local files automatically to the client depending on the URL. If no file can be located in the local file system, it is possible (through the use of a Promise) to provide some other logic.

Installation

$ npm install deliver-or-else

Usage

When requiring deliver-or-else, you are given a constructor function:

const Deliver = require('deliver-or-else')

The Deliver constructor function takes in one parameter (which is required), denoting the path to the local file system. Only the files in the path you give in will be available to the end users (the browser clients).

Given that, we can dedicate a single directory (such as the conventional public/) to be the one browsers can access:

const path = require('path')

// It is up to you to resolve the document root directory
let deliver = new Deliver(path.join(__dirname, 'public'))

Serving Files

Now that we have a Deliver instance, we can use it to automatically deliver files. The directory structure for our files, currently looks like this:

public/
	index.html
	test.css
	test.jpeg

Now to the server:

const http = require('http')

let server = http.createServer((req, res) => {
	/**
	 * The `deliver` method returns a `Promise`, which in turn can be used to 
	 * catch any errors (such as a 404). We could also provide a `then` clause 
	 * for when it works successfully and a file has been delivered.
	 */
	deliver.deliver(req, res).catch((err) => {
		// The err contains information regarding how the `fs.readFile` failed
		
		res.statusCode = 404
		res.setHeader('Content-Type', 'text/plain')
		res.end('404, no such file.')
	})
})

server.listen(80, '127.0.0.1', function () {
	console.log('Starting server...')
})

With the above structure, if the URL from the browser client is /index.html, test.css or test.jpeg, it will deliver one of these files, otherwise the client is presented with a 404, no such file error page.

Since errors are caught, we could provide some other routing mechanism in the catch method's callback. If the css and jpeg files were to be in the html document, they would be automatically requested from the server.

License

This module, and the code therein, is licensed under MIT.