MasterController

Views & Templates

Optional server-rendered HTML — bring your own engine.

In a Master app the UI lives in Next.js, so controllers return JSON. But MasterController also ships a pluggable view architecture for classic server-rendered HTML — useful for emails, admin pages, or non-Next deployments.

Register a view engine#

Any object with a register(master) method is a view adapter (EJS, Pug, a React SSR adapter, etc.). The adapter wires up returnView on controllers.

config
import master from 'mastercontroller';
import MyViewAdapter from './adapters/my-view.js';

master.useView(MyViewAdapter, { /* engine options */ });

Rendering from a controller#

homeController.js
export default class HomeController {
  index(obj) {
    this.returnView({ title: 'Home', message: 'Welcome!' });   // app/views/home/index.html
  }

  partial(obj) {
    this.returnPartialView('shared/header', { user: 'John' });  // no layout
  }

  api(obj) {
    this.returnJson({ status: 'ok' });                          // JSON works with any engine
  }
}

View structure#

text
app/views/
  layouts/master.html      # main layout
  home/index.html          # rendered by HomeController#index
  posts/show.html
Note
The view is inferred from the controller + action, so returnView(data) takes only data. Choose any engine — the controller API stays identical.