mirror of
https://github.com/CryptKeeperZK/ejs.git
synced 2026-01-09 07:27:56 -05:00
Add client side ejs compiled with express middleware example
This commit is contained in:
5
examples/express/README.md
Normal file
5
examples/express/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
```
|
||||
npm install
|
||||
npm start
|
||||
open http://localhost:3000
|
||||
```
|
||||
27
examples/express/app.js
Normal file
27
examples/express/app.js
Normal file
@@ -0,0 +1,27 @@
|
||||
var express = require('express');
|
||||
var path = require('path');
|
||||
var ejs = require('ejs');
|
||||
|
||||
var app = express();
|
||||
app.set('views', path.join(__dirname, 'views'));
|
||||
app.set('view engine', 'ejs');
|
||||
|
||||
function compileEjsTemplate(name, template) {
|
||||
const compiledTemplate = ejs.compile(template, {
|
||||
client: true,
|
||||
outputFunctionName: name
|
||||
});
|
||||
return function compileEjsTemplate(req, res, next) {
|
||||
res.locals.compiledEjsTemplates = res.locals.compiledEjsTemplates || {};
|
||||
res.locals.compiledEjsTemplates[name] = compiledTemplate.toString();
|
||||
return next();
|
||||
}
|
||||
}
|
||||
|
||||
app.use(compileEjsTemplate('helloTemplate', "Hello <%= include('messageTemplate', { person: 'John' }); %>"));
|
||||
app.use(compileEjsTemplate('messageTemplate', "<%= person %> now you know <%= fact %>."));
|
||||
app.use('/', function(req, res, next) {
|
||||
return res.render('index', {});
|
||||
});
|
||||
|
||||
app.listen(process.env.PORT || 3000);
|
||||
11
examples/express/package.json
Normal file
11
examples/express/package.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"description": "client side ejs compiled with express middleware",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"start": "node ./app.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"ejs": "^2.6.1",
|
||||
"express": "~4.16.0"
|
||||
}
|
||||
}
|
||||
28
examples/express/views/index.ejs
Normal file
28
examples/express/views/index.ejs
Normal file
@@ -0,0 +1,28 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>ejs client-side</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="greeting"></div>
|
||||
<script>
|
||||
const helloTemplateFn = <%- compiledEjsTemplates.helloTemplate %>;
|
||||
const messageTemplateFn = <%- compiledEjsTemplates.messageTemplate %>;
|
||||
|
||||
(function() {
|
||||
const includeFn = function(path, data) {
|
||||
if (path === 'messageTemplate') {
|
||||
return messageTemplateFn({
|
||||
fact: 'how to render a page with compiled ejs templates',
|
||||
person: data.person
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const html = helloTemplateFn({}, null, includeFn, null);
|
||||
const $greeting = document.getElementById('greeting');
|
||||
$greeting.innerHTML = html;
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user