NodeBB基本操作原理

「这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战」。

相关简介

最近作者接手了一个Nodebb项目。
简介:NodeBB是一个由Nodejs搭建的开源论坛系统,同时对外提供丰富的扩展组件以及生态支持。
ps:接收加功能的时候从头开始啃,啃完明白了当时为什么会选择这个架构。本着方便自己,方便后人,本次将相关的一些语法整理了出来,便于后面大家有类似诉求更易于上手。

直接相关语法简介

NodeBB用了benchpress方案作为了模板解决方案,此框架是一个用于Javascript 和 Nodejs的轻量级模板框架。

调整NodeBB 业务模板,需要对benchpress的语法进行了解。

常见模板语法

插值语法

{website} // 此页面展示数据 比如 webbsite = a 展示在页面即为 a

{{obj.url}} // 这种方案为对象类型的渲染
复制代码

条件语句

模板内的条件语句有两种表达方式,大括号写法和注释类型写法, IF语句后面的条件识别 自定义方法、boolean类型变量 和 !运算法变量。

ps:模板语法新旧不可包裹混用,官方也不建议混用,实际测试下来,不包裹混用是可以展示的

ps:if一定要记得结束

// temp 1
{{{ if boolean }}}
Hello World!
{{{ end }}}

// 注释 temp 2 此版本属于旧版本
<!-- IF aaa -->
<!-- ELSE -->
<!-- ENDIF aaa -->
复制代码

迭代

迭代语法,类似于for循环。

// temp 1
{{{ each animals }}}
   {animals.name}
   {{animals.header}}
{{{ end }}}

// temp 2
<!-- BEGIN animals -->
{animals.aaa}
<!-- END -->

// 将所有迭代循环中的def输出
<!-- BEGIN animals -->
{../def}
<!-- END -->
复制代码

注册帮助方法(高级)

// benchpress的方法如下
benchpress.registerHelper("showText", function(data) {
  return data.istrue : "AAA" : "BBB"
})
复制代码

// 本框架内自定义方法方案

/public/src/modules/helpers.js

在此js中新增一个处理方法即可

其他相关(不涉及实际使用但是有用的API)

.precompile(source, { filename }): Promise<string>

此方法将template编译为js语法

const fs = require('fs').promises;
const benchpress = require('benchpressjs');

const template = await fs.readFile('path/to/source/templates/favorite.tpl', 'utf8');
const compiled = await benchpress.precompile(template, { filename: 'favorite.tpl' });
await fs.writeFile('path/to/compiled/templates/favorite.jst', compiled);

复制代码

.__express

快速引擎API

.render(template, data): Promise<string> (alias: .parse(template, data, callback(string)))

该方法用于客户端解析模板,使用它,必须使用 .registerLoader来设置回调头以获取编译的末班模块

require(['benchpress'], (benchpress) => {
  benchpress.registerLoader((name, callback) => {
    // fetch `name` template module
  });

  benchpress.render('basic', {
    forum: 'NodeBB',
    language: 'Javascript',
  }).then((output) => {
    // do something with output
  });
});
复制代码

Guess you like

Origin juejin.im/post/7034103474681806855