Feathers.js - 加载静态内容
Feathers.js - Loading Static Content
我正在评估一个项目feathers.js。我喜欢它的愿望。因此,我决定尝试构建一个基本的内容管理系统,作为一种学习努力。事情进行的还算顺利。但是,我想在应用程序启动时将一些静态内容(文章)加载到内存中。我不知道该怎么做。
我的文章在 data/articles 目录中。每篇文章都是 markdown 命名为 [title].md。我有一个 JavaScript 块,我在控制台应用程序中测试了它,该应用程序将降价转换为 HTML。该代码使用 markdown-js 将 HTML 转换为 JSON 对象。它看起来像这样:
const fs = require('fs');
const markdownConverter = require('markdown');
let articles = [];
let files = fs.readdirSync('./data/articles');
for (let i=0; i<files.length; i++) {
let title = files[i].substr((files[i].lastIndexOf('/')+1), (files[i].length-3));
let markdown = fs.readFileSync(files[i], 'utf8');
let html = markdownConverter.toHTML(markdown);
articles[title] = html;
}
我在 Feathers 中添加了一条如下所示的路线:
app.use('/articles/:slug', function(req, res) {
console.log('loading article: ' + req.params.slug);
let content = '';
// TODO: How to get access to the articles array.
// I want to get the HTML using content = articles[req.params.slug];
res.render('article', { content: content });
});
我不确定将加载 markdown 的代码放到一个数组中,当用户请求文章时我可以访问该数组。那属于哪里?我的猜测是在使用 yeoman 生成器创建 Feathers 项目时生成的 app.js 文件中。然而,我不确定它到底是什么样子。
既然feathers是一个Express应用,你应该可以使用express中间件。我推荐这个,它允许您为降价创建 HTML 模板并静态地提供它们,而无需创建任何解析器或 for 循环。
https://github.com/natesilva/node-docserver
var docserver = require('docserver');
...
app.use(docserver({
dir: __dirname + '/docs', // serve Markdown files in the docs directory...
url: '/'} // ...and serve them at the root of the site
));
或者,这个中间件会在将 Markdown 作为 HTML 在 Jade 模板中提供之前对其进行预解析。
我正在评估一个项目feathers.js。我喜欢它的愿望。因此,我决定尝试构建一个基本的内容管理系统,作为一种学习努力。事情进行的还算顺利。但是,我想在应用程序启动时将一些静态内容(文章)加载到内存中。我不知道该怎么做。
我的文章在 data/articles 目录中。每篇文章都是 markdown 命名为 [title].md。我有一个 JavaScript 块,我在控制台应用程序中测试了它,该应用程序将降价转换为 HTML。该代码使用 markdown-js 将 HTML 转换为 JSON 对象。它看起来像这样:
const fs = require('fs');
const markdownConverter = require('markdown');
let articles = [];
let files = fs.readdirSync('./data/articles');
for (let i=0; i<files.length; i++) {
let title = files[i].substr((files[i].lastIndexOf('/')+1), (files[i].length-3));
let markdown = fs.readFileSync(files[i], 'utf8');
let html = markdownConverter.toHTML(markdown);
articles[title] = html;
}
我在 Feathers 中添加了一条如下所示的路线:
app.use('/articles/:slug', function(req, res) {
console.log('loading article: ' + req.params.slug);
let content = '';
// TODO: How to get access to the articles array.
// I want to get the HTML using content = articles[req.params.slug];
res.render('article', { content: content });
});
我不确定将加载 markdown 的代码放到一个数组中,当用户请求文章时我可以访问该数组。那属于哪里?我的猜测是在使用 yeoman 生成器创建 Feathers 项目时生成的 app.js 文件中。然而,我不确定它到底是什么样子。
既然feathers是一个Express应用,你应该可以使用express中间件。我推荐这个,它允许您为降价创建 HTML 模板并静态地提供它们,而无需创建任何解析器或 for 循环。
https://github.com/natesilva/node-docserver
var docserver = require('docserver');
...
app.use(docserver({
dir: __dirname + '/docs', // serve Markdown files in the docs directory...
url: '/'} // ...and serve them at the root of the site
));
或者,这个中间件会在将 Markdown 作为 HTML 在 Jade 模板中提供之前对其进行预解析。