Taunus (GitHub: taunus/taunus, License: MIT, npm: taunus) by Nicolas Bevacqua is an MVC framework that offers full-stack progressive enhancement. It uses server-side rendering, and will also use the browser's history API for routing if it's available.
Taunus can deal with view caching on your behalf, if you so desire, using asynchronous embedded database stores on the client-side. Turns out, there's pretty good browser support for IndexedDB. Of course, IndexedDB will only be used if it's available, and if it's not then views won't be cached in the client-side besides an in-memory store. The site won't simply roll over and die, though.
It supports both Hapi and Express, so there's some flexibility on the server. The server-side component is mainly dedicated to rendering.
There's a getting started guide that shows how to set up a Taunus project and how to do basic things like adding a layout.
Chris Morrell wrote a detailed response to a StackOverflow question about finding the root path for a Node project.
This resulted in the App Root Path Module (GitHub: inxilpro/node-app-root-path, License: MIT, npm: app-root-path), a small module that returns the path to the current module's main directory. It returns a string, so you just have to do
require('app-root-path') and pass the output to
Chris notes that the basic method for this is:
path.resolve(__dirname).split('/node_modules');, but there are edge cases where
require.main.filename is used instead. This is all explained in the StackOverflow post.
If you're using an ES6-based HTTP framework like Koa, then you might feel your database library could do with generator support as well. Fortunately, Vadim Demedes has rewritten his MongoDB module, Mongorito (GitHub: vdemedes/mongorito, License: MIT, npm: mongorito) to use ES6 generators.
Now you can load items like this:
var posts = yield Post.find();
Saving works the same way:
yield post.save(); // document created var id = post.get('_id'); // _id automatically had been set after .save()
It's based on the monk MongoDB module, and has good test coverage. I've never used a module like this in production, but I definitely like the idea of generator syntax for databases.