Moved client-side markdown rendering to this server
This commit is contained in:
@@ -25,6 +25,11 @@ const articles = sequelize.define('articles', {
|
||||
defaultValue: ''
|
||||
},
|
||||
|
||||
rendered: {
|
||||
type: Sequelize.TEXT,
|
||||
defaultValue: ''
|
||||
},
|
||||
|
||||
edits: {
|
||||
type: Sequelize.INTEGER(11),
|
||||
defaultValue: 0
|
||||
|
||||
@@ -2,6 +2,14 @@ const Sequelize = require('sequelize');
|
||||
const sequelize = require('..');
|
||||
|
||||
const revisions = sequelize.define('revisions', {
|
||||
index: {
|
||||
type: Sequelize.INTEGER(11),
|
||||
allowNull: false,
|
||||
autoIncrement: true,
|
||||
primaryKey: true,
|
||||
unique: true
|
||||
},
|
||||
|
||||
title: {
|
||||
type: Sequelize.TEXT,
|
||||
defaultValue: ''
|
||||
@@ -17,6 +25,11 @@ const revisions = sequelize.define('revisions', {
|
||||
defaultValue: ''
|
||||
},
|
||||
|
||||
rendered: {
|
||||
type: Sequelize.TEXT,
|
||||
defaultValue: ''
|
||||
},
|
||||
|
||||
originalIndex: {
|
||||
type: Sequelize.INTEGER(11),
|
||||
default: null
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
const { Op } = require('sequelize');
|
||||
const { articles, revisions } = require('../database/models');
|
||||
const markdownIt = require('markdown-it')();
|
||||
|
||||
const route = async (req, res) => {
|
||||
//get the existing record
|
||||
@@ -20,6 +21,7 @@ const route = async (req, res) => {
|
||||
title: record.title,
|
||||
author: record.author,
|
||||
body: record.body,
|
||||
rendered: record.rendered,
|
||||
originalIndex: record.index
|
||||
});
|
||||
|
||||
@@ -28,6 +30,7 @@ const route = async (req, res) => {
|
||||
title: req.body.title || record.title,
|
||||
author: req.body.author || record.author,
|
||||
body: req.body.body || record.body,
|
||||
rendered: markdownIt.render(req.body.body) || record.rendered,
|
||||
edits: record.edits + 1
|
||||
}, {
|
||||
where: {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
const { articles } = require('../database/models');
|
||||
const markdownIt = require('markdown-it')();
|
||||
|
||||
const route = async (req, res) => {
|
||||
//check for missing data
|
||||
@@ -18,7 +19,8 @@ const route = async (req, res) => {
|
||||
const [instance, created] = await articles.upsert({
|
||||
title: req.body.title,
|
||||
author: req.body.author,
|
||||
body: req.body.body
|
||||
body: req.body.body,
|
||||
rendered: markdownIt.render(req.body.body),
|
||||
});
|
||||
|
||||
if (!created) {
|
||||
|
||||
@@ -7,7 +7,7 @@ const query = (ascending, metadataOnly) => async (req, res) => {
|
||||
if (req.params.id && typeof(parseInt(req.params.id)) === 'number') {
|
||||
const result = await articles.findOne({
|
||||
attributes: [
|
||||
'index', 'title', 'author', 'edits', 'createdAt', 'updatedAt', ...(!metadataOnly ? ['body'] : [])
|
||||
'index', 'title', 'author', 'edits', 'createdAt', 'updatedAt', ...(!metadataOnly ? ['body', 'rendered'] : [])
|
||||
],
|
||||
where: {
|
||||
index: {
|
||||
@@ -24,7 +24,7 @@ const query = (ascending, metadataOnly) => async (req, res) => {
|
||||
else {
|
||||
const result = await articles.findAndCountAll({
|
||||
attributes: [
|
||||
'index', 'title', 'author', 'edits', 'createdAt', 'updatedAt', ...(!metadataOnly ? ['body'] : [])
|
||||
'index', 'title', 'author', 'edits', 'createdAt', 'updatedAt', ...(!metadataOnly ? ['body', 'rendered'] : [])
|
||||
],
|
||||
order: [
|
||||
['index', ascending ? 'ASC' : 'DESC']
|
||||
|
||||
@@ -20,6 +20,7 @@ const route = async (req, res) => {
|
||||
title: record.title,
|
||||
author: record.author,
|
||||
body: record.body,
|
||||
rendered: record.rendered,
|
||||
originalIndex: record.index
|
||||
});
|
||||
|
||||
|
||||
@@ -26,4 +26,48 @@ app.get('*', (req, res) => {
|
||||
server.listen(process.env.WEB_PORT || 3100, async (err) => {
|
||||
await database.sync();
|
||||
console.log(`listening to localhost:${process.env.WEB_PORT || 3100}`);
|
||||
|
||||
//parse the unrendered data from the database
|
||||
const markdownIt = require('markdown-it')();
|
||||
const { articles, revisions } = require('./database/models');
|
||||
|
||||
const missingArticles = await articles.findAll({
|
||||
where: {
|
||||
rendered: ''
|
||||
}
|
||||
});
|
||||
|
||||
const missingRevisions = await revisions.findAll({
|
||||
where: {
|
||||
rendered: ''
|
||||
}
|
||||
});
|
||||
|
||||
await Promise.all(
|
||||
missingArticles.map(async ma => {
|
||||
ma.update({
|
||||
rendered: markdownIt.render(ma.body)
|
||||
}, {
|
||||
where: {
|
||||
index: ma.index
|
||||
}
|
||||
});
|
||||
})
|
||||
)
|
||||
.then(result => {if (result.length > 0) console.log('Rendered articles in HTML'); })
|
||||
;
|
||||
|
||||
await Promise.all(
|
||||
missingRevisions.map(async mr => {
|
||||
mr.update({
|
||||
rendered: markdownIt.render(mr.body)
|
||||
}, {
|
||||
where: {
|
||||
index: mr.index
|
||||
}
|
||||
});
|
||||
})
|
||||
)
|
||||
.then(result => {if (result.length > 0) console.log('Rendered revisions in HTML'); })
|
||||
;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user