Tag: handlebars.js

Express&Handlebars全球物业

我使用Handlebars(使用express3-handlebars)模板和Passport在NodeJS应用程序中进行身份validation。 所有的工作都很好,但是我想知道是否有办法将Passport创build的req.user对象全局传递给Handlebars。 所以我的标题部分可能看起来像这样: <header> <h1>My Title</h1> {{#if user}} <p>Hello {{user.name}}</p> {{else}} <p>Please <a href='/login'>Log In</a></p> {{/if}} </header> 就像现在这样,我必须在每个页面呈现中明确地传递用户对象: app.get('/', function(req, res){ res.render('home', { page_title: 'welcome', user: req.user }); }); 这似乎是错误的方式去做,因为我需要在每一页上,我可以不只是设置一次,让所有页面都可以访问它吗? 当我实例化Handlebars时,我无法做到这一点,因为它取决于用户使用Passportlogin,这并不总是如此。 创build一个全局的“page_options”对象,附加并传递给每个渲染是正确的解决scheme还是Handlebars / Express有办法处理这个问题?

如何将app.js中的常用variables渲染到所有的express中

在我的Node.js应用程序中,一些渲染variables或每条路线是常见的。每条路线上都有大约4-5个variables。 我有大约20条路线。 目前我正在做res.render每个路由中的这些variables 有没有一种方法可以将这些常用variables传递给每个路由正在使用的某个地方(比如:app.js),以便我可以清理一下我的代码。 我使用express.js作为模板的节点和handlebars 。 编辑:我想我应该多解释一下 res.render('abc', { commonitem1: 'one', commonitem2: 'two', … }); ————————————- another route res.render('xyz', { commonitem1: 'one', commonitem2: 'two', … }); 我想避免在我的每一条路线上重复这一点,并想从一个共同的地方渲染它。

无法使用Express Handlebars在目录中查看视图

我正在遵循从Express Generator获取的基本应用布局,并尝试将其configuration为Handlebars。 片段: var exphbs = require('express-handlebars'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views/')); app.engine('handlebars', exphbs({defaultLayout: 'main'})); app.set('view engine', 'handlebars'); 一切都很好,直到我尝试将Handlebars的扩展名更改为.hbs ,如下所示: app.engine('handlebars', exphbs({defaultLayout: 'main', extname: '.hbs'})); (并且当然重命名文件)。 这导致: 错误:无法在视图目录中查找视图“错误” 我已经在Express-handlebars.js源代码中查看function ExpressHandlebars(config) ,它确实试图设置extname适当。 我究竟做错了什么?

是否有可能在Ghost中注册自定义助手?

按照本指南,我使用Ghost作为npm模块。 我想添加一些自定义帮助,我可以利用我的主题。 有没有办法做到这一点,而无需更改Ghost模块中的代码? 这是我现在的代码 const ghost = require('ghost'); const path = require('path'); const hbs = require('express-hbs'); const config = path.join(__dirname, 'config.js'); const coreHelpers = {}; coreHelpers.sd_nls = require('./sd_nls'); // Register a handlebars helper for themes function registerThemeHelper(name, fn) { hbs.registerHelper(name, fn); } registerThemeHelper('sd_nls', coreHelpers.sd_nls); ghost({ config: config }) .then(ghostServer => ghostServer.start()); 我认为一个可能的问题是我的hbs是一个新的handlebars实例,与Ghost使用的不同,因此当Ghost运行时,它不包含我已注册的任何helpers。

Express中的res.locals.somevariables在hbs(句柄模板)

我正在尝试将我的会话variables传递给我的把手模板,但是我陷入困境。 现在我正在使用我的app.configure函数: app.use(function(req, res, next){ res.locals.session = req.session; console.log(res.locals.session); next(); }); 它正确地logging到控制台,但是当我尝试在我的句柄模板中使用“会话”variables时,什么也没有显示出来。 这是我的模板的一部分: <body> <nav> {{> topBarPartial}} {{> secondaryBarPartial}} </nav> <div> <p>before</p> {{session}} <p>after</p> {{> mainPartial}} </div> {{> footerPartial}} </body> 以下是控制台正在logging的内容: { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }, userId: 45253262, name: 'Austin' } 有任何想法吗?

客户端+服务器端模板,对我感觉不对,如何优化?

在我正在制作的Web应用程序中,我使用经典的Express + Jade来呈现客户端页面,同时也暴露了一些REST API(比如:“user list API”)。 这些客户端页面使用提供的API来检索“用户列表”并显示它。 为了显示它,一旦数据被检索,我使用句柄模板库。 对我来说,这似乎有点肮脏,使用两个模板引擎,parsing代码两次,如何使它更好? 注意:我已经通过在客户端页面中插入一个脚本variables来发送初始数据,从而优化了这个function。 然后这个variables以API接收的数据显示。 该API仅用于数据刷新的情况。 更新:使用玉双方服务器和客户端是一个好主意,但如何分离/指定? 渲染模板中的哪个部分应该在服务页面的时候完成,哪个部分将被客户端使用?

如何在express中使用.html文件扩展名为handlebars?

所以我想知道如何使用.html扩展名而不是.handlebars或.hbs扩展名。 我这样做,所以我可以开发使用普通的HTML,这样我的前端开发人员可以在他们的IDE无缝编辑文件没有任何额外的configuration。 此外,它还将帮助我们快速安装HTML模板。

handlebars.js Uncaught TypeError:Object#<Object> has no method'call'

任何人都帮助handlebars.js的问题? 我使用在Centos 6.4上运行的句柄来预编译模板。 要安装这个我安装: npm:yum -y –enablerepo = epel install npm 首先inheritance以避免问题:npm install -ginheritance 然后把手本身:npm install -g handlebars 这给出了以下版本: handlebars@2.0.0-alpha.1 / usr / lib / node_modules / handlebars optimist@0.3.7(wordwrap@0.0.2) uglify-js@2.3.6(async@0.2.10,source-map@0.1.31) 我正在使用requirejs来加载下面的应用程序: jQuery v1.11.0 Underscore.js 1.6.0 车把v1.3.0(含amd) backbone.js 1.1.0 有没有人有一套版本号一起工作? 谢谢!

使用明智的手柄与vue js

我正在build立一个应用程序使用快车手柄为服务器端模板。 在客户端,我想使用vue.js. 但是,它们都共享相同的双括号记法{{ variable }} 。 现在,我的vue.jsvariables不显示,因为我的句柄模板重写它。 例如: home.html的: <div id="app"> {{message}} //this will not show up </div> home.js: new Vue({ el: '#app', data: { message: 'Hello Vue.js!' } }); 不过,如果我在我的服务器端控制器中定义message : res.render('../views/home', { message: 'message from handlebars' }); 该消息将显示。 所以总之,有没有一种方法可以使用vue.js进行客户端模板,同时仍然使用express-handlebars进行服务器端模板化? 提前致谢!

如果您在Handlebars.js中预编译自定义帮助程序,如何注册自定义帮助程序?

我试图用命令handlebar app/views/templates/walrus.handlebar预编译一个Handlebars.js模板app/views/templates/walrus.handlebar ,但是它失败了,因为模板使用了我在一个单独的js中定义的自定义帮助器file public/javascripts/handlebar_helpers.js 。 如何调用Handlebars的命令行版本,以便使用自定义帮助程序了解JavaScript文件?