Add payload routes dynamically

This commit is contained in:
Elliot DeNolf
2018-04-14 12:30:05 -06:00
parent c2c5e50800
commit ca6b70a427
7 changed files with 445 additions and 6701 deletions

View File

@@ -1,5 +1,5 @@
{
"extends": "eslint:recommended",
// "extends": "eslint:recommended",
"env": {
"browser": true,
"commonjs": true,

View File

@@ -1,13 +1,14 @@
'use strict';
var payload = require('./payload');
const express = require('express');
const app = express();
app.set('view engine', 'pug');
var payloadBootstrap = payload(app);
app.set('views', [__dirname + '/views', payloadBootstrap.views]);
const Payload = require('./payload');
let payload = new Payload(app);
app.set('views', [`${__dirname}/views`, payload.views]);
app.get('/', (req, res) => res.render('index',
{
title: 'Index'

7049
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -12,5 +12,8 @@
"dependencies": {
"express": "^4.16.3",
"pug": "^2.0.3"
},
"devDependencies": {
"eslint": "^4.19.1"
}
}

21
payload/.eslintrc Normal file
View File

@@ -0,0 +1,21 @@
{
// "extends": "eslint:recommended",
"env": {
"browser": true,
"commonjs": true,
"node": true,
"es6": true
},
"parserOptions": {
"sourceType": "module",
"ecmaVersion": 6
},
"rules": {
"no-console": "off",
"strict": [
"error",
"global"
],
"curly": "warn"
}
}

View File

@@ -1,26 +1,37 @@
'use strict';
const path = require('path');
let fs = require('fs');
module.exports = function (app) {
class Payload {
app.get('/login', function (req, res) {
res.render('login',
{
title: 'Payload Login'
})
});
constructor(app) {
this.app = app;
this.views = path.join(__dirname, 'views');
app.get('/admin', function (req, res) {
res.render('admin',
{
title: 'Payload Admin'
})
});
// /payload/<model-name>/?arg1=blah&arg2=blah
return {
views: path.join(__dirname, 'views')
mountInternalModel(this.app, path.join(__dirname, 'models'), 'User');
mountDefaultViews(this.app);
}
}
let mountDefaultViews = function (app) {
fs.readdir(path.join(__dirname, 'views'), (err, files) => {
files.forEach((file, index) => {
let fileNoExtension = file.replace(/\.[^/.]+$/, "");
console.log(`Mounting ${file}`);
app.get(`/payload/${fileNoExtension}`, function (req, res) {
res.render(fileNoExtension,
{
title: `Payload ${fileNoExtension}`
})
});
});
});
};
let mountInternalModel = function (app, directory, modelName) {
app.get(`/payload/${modelName}`, function (req, res) {
const User = require(path.join(directory, modelName));
res.send(JSON.stringify(new User("John Doe", 22, "john@doe.com")));
});
};
module.exports = Payload;

9
payload/models/User.js Normal file
View File

@@ -0,0 +1,9 @@
class User {
constructor(name, age, email) {
this.name = name;
this.age = age;
this.email = email;
}
}
module.exports = User;