请耐心等待,目前正在学习以下技术。
我构建了一个基本的应用程序,包括NodeJS + ExpressJS + MongoDB + Monk + Jade构建。我打算用Handlebars取代Jade,这是一种不同的模板引擎。为了解决这个问题,我正在考虑实现Assemble.io,因为它是一个使用Handlebars的静态站点生成器,它为使用Bootstrap前端框架开始构建奠定了良好的基础。我也喜欢Assemble很好地将文件分成布局,模板和局部文件。
此应用程序/网站的目标是从MongoDB中提取数据并将其显示在前端。前端将包含100个不同的内容页面,因此它们需要易于维护。当然,我还需要与前端和后端代码明确区分。
建立这样的东西最合乎逻辑的方法是什么?可以用ExpressJS实现Assemble吗?如果是这样,我如何在app.js
中设置我的视图以显示汇编文件?或者将view engine
设置为把手并将CDN链接引入Bootstrap会更好吗? (但如果我这样做,我将如何设置布局,模板和部分?)
答案 0 :(得分:1)
您可以采取一些不同的方法。
View
类,并使用汇编进行加载和渲染。我现在可以使用#2,因此您可以直接使用汇编api来加载app.js
中的模板,数据,助手,中间件等。然后创建一个render
函数,您可以在路径中使用该函数来获取页面并渲染它......
var express = require('express');
var Assemble = require('assemble');
var app = express();
var assemble = new Assemble();
// setup middleware
assemble.onLoad(/\.hbs/, function(file, next) {
// so something if needed
next();
});
// load helpers
assemble.helpers(['path/to/helpers/*.js']);
// load async helpers
assemble.asyncHelpers(['path/to/async-helpers/*.js']);
// load templates
assemble.layouts(['path/to/layouts/*.hbs']);
assemble.partials(['path/to/partials/*.hbs']);
assemble.pages(['path/to/pages/*.hbs']);
// load global site data
assemble.data(['path/to/site.json']);
// render function to make looking up and rendering pages easier
function render(name, locals, cb) {
var view = assemble.getView(name);
if (!view) return cb(new Error('Unable to find "' + name + '"'));
view.render(locals, function(err, result) {
if (err) return cb(err);
cb(null, result.content);
});
}
// setup some express routes
app.get('/', function(req, res, next) {
render('index', {title: 'Home Page'}, function(err, content) {
if (err) return next(err);
res.status(200); // I don't remember this api off the top of my head
res.send(content);
});
});
希望这有帮助。