gpt4 book ai didi

javascript - 如何使用 koa-views + Handlebars 渲染主要布局和局部?

转载 作者:行者123 更新时间:2023-12-03 16:35:55 24 4
gpt4 key购买 nike

这是我的意见文件夹结构:

- views
- layouts
layout.hbs
- partials
part.hbs
home.hbs

我正在渲染模板宽度:
app.use(views(__dirname + '/views', {
extension: 'hbs',
map: { hbs: 'handlebars' }
}));

router.get('/', async (ctx) => {
await ctx.render('home', {
Name: 'Iris',
Type: 'Web',
Path: '/'
});
});

我想要的是定义主布局文件和部分文件夹,就像它在 express-handlebars 中一样.真的没有办法用 koa-views 来实现这一点纯净的 handlebars ?

我必须使用 koa-hbskoa-handlebars ?但是他们使用了很快被弃用的功能(和 Handlebars v2.0.0、v3.0.0):
koa deprecated Support for generators will been removed in v3.
See the documentation for examples of how to convert old middleware
https://github.com/koajs/koa/tree/v2.x#old-signature-middleware-v1x app.js:45:5

编辑:

好像是 koa-hbskoa-handlebarskoa v2 不兼容的插件.所以没办法使用 koa v2 , partialslayoutshandlebars 渲染眼下? :( 没有那些 (define layouts , partials ) handlebars 是没用的。所以仍然坚持 express ...

最佳答案

koa-hbs 真的只是用 Handlebars .registerPartial在引擎盖下。

尽可能基本:

var handlebars = require('handlebars'),
fs = require('fs')

handlebars.registerPartial(
'defaultLayout',
fs.readFileSync(__dirname + '/views/layouts/default.html', 'utf8')
)

// then continue with loading the application...

但是您可能希望它只是在启动时加载整个部分文件夹的便利。
  • 创建一个 Promise,并执行一个读取您的部分文件夹的函数,并通过 handlebars.registerPartial 注册每个部分.它应该在它们都注册后解决 Promise。
  • 创建一个等待 Promise 解决的中间件异步,因此您的应用在注册这些部分之前不会呈现任何 View

  • 这是我使用的一个例子:
    var fs = require('fs'),
    handlebars = require('handlebars'),
    glob = require('glob'), // for convenience, npm install glob
    path = require('path')

    function readAsPromise (path) {
    return new Promise(function (resolve, reject) {
    fs.readFile(path, 'utf8', function (err, data) {
    resolve({path: path, data: data})
    })
    })
    }

    function registerPartial (partial) {
    var partialName = path.basename(partial.path, '.hbs')

    handlebars.registerPartial(partialName, partial.data)
    }

    var loadPartials = new Promise(function (resolve, reject) {

    glob('./views/partials/*.hbs', function (err, files) {
    Promise.all(files.map(readAsPromise)).then(function (partials) {
    partials.forEach(registerPartial)
    resolve()
    })
    })

    })

    现在的问题是您使用的是哪个版本的 Koa
    // koa 1

    app.use(function* (next) {
    yield loadPartials
    yield next
    })

    // latest koa

    app.use(async (ctx, next) => {
    await loadPartials
    })

    现在只需像往常一样在 Handlebars 中使用部分。这适用于需要相同 Handlebars 实例的 koa-views

    关于javascript - 如何使用 koa-views + Handlebars 渲染主要布局和局部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38731487/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com