ds-render

2.2.4 • Public • Published

@ds/render

installation

ccnpm i --save @ds/render

usage

var dsRender = require('@ds/render');
var app = require('express')();
var dsRenderMiddleware = dsRender.augmentApp(app, {
    appRoot: __dirname // 必须的
    appendMiddleware: false // 默认 false, 设置成 true 会添加返回的 middleware: app.use(dsRenderMiddleware)
});

除了 dsRender.augmentApp() 方法返回一个供 express app 使用的 middleware 外,其他方法均返回 promise

dsRender.getParsedPartials(appRoot[, viewPath])

#{appRoot}/partials 下的 **/*.html 文件做成 Ractive.parse() 后的模板对象,返回的 object promise resolve 后为类似:

{
    a: {v:1,t:[/*...*/]}, // #{appRoot}/partials/a.html 解析后
    b.c.d: {v:1,t:[/*...*/]} //#{appRoot}/partials/b/c/d.html 解析后
}

如果把可选的 viewPath 给出如 #{appRoot}/ccc/account/views/home.html 则会到 #{componentRoot}/partials(#{componentRoot} 表示组件的根目录,本例中就是 #{appRoot}/ccc/account/)查找 partials,如存在 #{appRoot}/ccc/account/partials/ac.html 返回的对象会有 ac 这个 parsed partial,如果同时存在 #{appRoot}/partials/ac.html#{appRoot}/ccc/account/partials/ac.html,以组件的 partial 为优先。

dsRender.getParsedTemplate(filePath)

给出模板文件路径,返回 Ractive.parse() 后的模板对象(promise)。

以上两个方法是 @ds/render 的基础,返回的模板都会做资源路径的替换。

dsRender.augmentApp(app, opts)

用法在最前面,使用后,express middleware 里面的 res 对象会添加下列方法:

res.preRenderView(name)

会先到 #{componentRoot}/views 再到 #{appRoot}/views 查找模板文件,返回的 view 对象(promise)中有 view.templateview.partials

res.preRenderLocals(locals)

组合 app.locals (全局模板变量) app.locals.__proto__ (父 app 的全局模板变量) res.locals 和这里给进的 locals,locals 对象里的值可以是 promise 如

{
    a: promiseA,
    b: promiseB, // 第一层的 promise 会自动解决
    c: {
        pc: promiseInC // 这里的 promise 不会自动解决了
    }
}

返回的是 promise

res.rendr(name, locals)

使用前面两个方法生成 html,返回的是 promise

res.render(name, locals, fn)

覆盖(overwrite)了 express 里面的 res.render() 方法。

Readme

Keywords

Package Sidebar

Install

npm i ds-render

Weekly Downloads

1

Version

2.2.4

License

MIT

Last publish

Collaborators

  • undozen