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.