allow marko/express to be used as middleware

This commit is contained in:
Michael Rawlings 2017-03-08 16:58:48 -08:00
parent 29a4272a74
commit 64679b419a
5 changed files with 53 additions and 37 deletions

View File

@ -2,8 +2,24 @@ require('./runtime/env-init');
var assign = require('object-assign');
var express = module.parent.require('express');
var response = express.response;
patchResponse(express.response);
delete require.cache[__filename];
module.exports = function markoAppMiddleware() {
var sacrificialApp = express();
sacrificialApp.once('mount', function onmount(parent) {
// Patch the response
patchResponse(parent.response);
// Remove sacrificial express app
parent._router.stack.pop();
});
return sacrificialApp;
}
function patchResponse(response) {
response.marko = response.marko || function(template, data) {
if(typeof template === 'string') {
throw new Error(
@ -30,5 +46,4 @@ response.marko = response.marko || function(template, data) {
template.render(data, res);
};
delete require.cache[__filename];
}

View File

@ -1,10 +1,10 @@
exports.createApp = function(express, markoExpressPath) {
var app = express();
require(markoExpressPath);
var markoExpress = require(markoExpressPath);
app.locals.foo = 'FOO';
app.use(markoExpress());
app.use(function(req, res, next) {
res.locals.bar = 'BAR';
next();

View File

@ -1,7 +1,8 @@
exports.createApp = function(express, markoExpressPath) {
require(markoExpressPath);
var app = express();
var markoExpress = require(markoExpressPath);
app.use(markoExpress());
return app;
};

View File

@ -1,10 +1,10 @@
exports.createApp = function(express, markoExpressPath) {
require(markoExpressPath);
var app = express();
var markoExpress = require(markoExpressPath);
app.locals.foo = 'FOO';
app.use(markoExpress());
app.use(function(req, res, next) {
res.locals.bar = 'BAR';
next();

View File

@ -1,12 +1,12 @@
exports.createApp = function(express, markoExpressPath) {
require(markoExpressPath);
var app = express();
var markoExpress = require(markoExpressPath);
app.locals.foo = 'APP';
app.locals.bar = 'APP';
app.locals.baz = 'APP';
app.use(markoExpress());
app.use(function(req, res, next) {
res.locals.foo = 'RES';
res.locals.bar = 'RES';