Simple, lazy way to serve a directory of semi-static pages in express.js. Handy for building quick 'static' pages inside an othewise 'dynamic' app.
Simple, lazy way to serve a directory of semi-static pages in express.js. Handy for building quick "static" pages inside an otherwise "dynamic" app.
Often you have a dynamic web app that also needs a bunch of mostly "static" pages. But you still want to use the same app layouts and template system to build out those pages. Take for instance an FAQ page inside your app that otherwise has a bunch of dynamic content.
It's silly to build a specifc route for that page when all you really want is a route that at 'http://yourapp.com/faq' renders the
faq.jade template in your express.js app.
I find myself adding code like this to nearly every express app I write, so I figured why the heck not publish an npm module and re-use that. So, here we are.
Install with npm:
npm install semi-static
Create a folder called
static inside your express views folder.
Register a handler that tells it to use semi-static to render and serve template names at urls as if they were static:
You can run the example in this repo with
node server.js and both http://localhost:3000/test and http://localhost:3000/nested/nested-works-too should render the correct templates.
Here's the code:
// super simple demovar express = require'express'semiStatic = require'./semi-static';// init our appapp = express;// use jadeappset'view engine' 'jade';// register our handlerappget'*' semiStatic;// we can still have a normal 404 at the end// because it will only do something if there's// a path that matches.appall'*'ressend'not found' 404;;applisten3000;console.log'started';
All it needs is the folder where your "static" templates live and the file extension your templates use.
jade as a file extension and
__dirnam + '/views/static' as the directory.
If that's not the case you can set the options as follows:
appget'*' semiStaticfolderPath: '/my-other-folder'fileExt: 'ejs';
That's it, easy-peasy.
If you think this is handy. Follow @HenrikJoreteg on the twitters. See you on the interwebz!