2.0.1 • Published 7 years ago

express-initialize v2.0.1

Weekly downloads
1
License
MIT
Repository
github
Last release
7 years ago

express-initialize

A simple Express app initializer.

Install it with NPM or Yarn:

$ npm install --save express-initialize
$ yarn add express-initialize

Example

Before

Everything is done in the app.js file:

// app/app.js

const express = require('express');
const handlebars = require('express-handlebars');
const orm = require('orm');

const app = express();

const hbs = handlebars.create({
    defaultLayout: 'main',
    helpers: {
        someFunction: () => { return 'Something'; }
    },
    // More configuration etc.
});
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');

app.use(express.static('./static'));
app.use(compression());

app.get('/home', (request, response) => {
    response.render('home');
});

app.get('/other-page', (request, response) => {
    response.render('other-page');
});

orm.connect('mysql://root:password@host/database')
    .then(connection => {
        // etc.
    })
    .catch(console.error);

app.listen(80);

After

Everything is moved to separate files:

// app/app.js

const express = require('express');
const expressInitialize = require('express-initialize');

const app = express();

const initializers = getInitializers(); // Load the initializers
expressInitialize.initialize(app, initializers)
    .then(() => {
        app.listen(80);
    })
    .catch(console.error);

The function initialize takes two arguments: the Express app that will be passed to the initializers and an array containing the initializers.

An initializer is an object which can have three properties:

NameTypeDescription
namestringName of the initializer, for usage with after.
afterstring or string[]Name(s) of the initializer(s) after which the initializer should be run.
configurefunctionThe function that will be run, takes app as argument and may return a Promise.

For example, a file for Handlebars.

// app/initializers/handlebars.js

module.exports = {
    configure: app => {
        const hbs = handlebars.create({
            defaultLayout: 'main',
            helpers: {
                someFunction: () => { return 'Something'; }
            },
            // More configuration etc.
        });
        app.engine('handlebars', hbs.engine);
        app.set('view engine', 'handlebars');
    }
};

You can also return a Promise.

// app/initializers/database.js

module.exports = {
    configure: app => {
        return new Promise((resolve, reject) => {
            orm.connect('mysql://root:password@host/database')
                .then(connection => {
                    // do something with connection
                    resolve();
                })
                .catch(reject);
        });
    }
}

Or specify what initializers have to run first.

// app/initializers/routes.js

module.exports = {
    after: 'middleware',
    configure: app => {
        app.get('/home', (request, response) => {
            response.render('home');
        });
    }
}
2.0.1

7 years ago

2.0.0

7 years ago

1.0.0

8 years ago