首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Node.js + Express + Hogan.js的分式

Node.js + Express + Hogan.js的分式
EN

Stack Overflow用户
提问于 2012-10-08 22:18:44
回答 6查看 21K关注 0票数 18

我正在开发一个网站与Node.js +快递和使用作为视图引擎Hogan.js。

这是我的文件app.js

代码语言:javascript
复制
/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'hjs');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('your secret here'));
  app.use(express.session());
  app.use(app.router);
  app.use(require('less-middleware')({ src: __dirname + '/public' }));
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', routes.index);
app.get('/about', routes.about);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

文件/routes/index.js为:

代码语言:javascript
复制
/*
 * GET pages.
 */

exports.index = function(req, res){
  res.render(
    'index',
    {
      title: 'Home Page',
      author: 'Bruce Wayne'
    }
  );
};

exports.about = function(req, res){
  res.render(
    'about',
    {
      title: 'About Page',
      author: 'Bruce Wayne'
    }
  );
};

/views文件夹中,有:

|- part.hjs

|- index.hjs

|- cv.hjs

文件part.hjs为:

代码语言:javascript
复制
<h3>Hello {{ author }}</h3>

文件index.hjs为:

代码语言:javascript
复制
<h1>Title: {{ title }} </h1>
{{> part }}
Welcome to Gotham City.

文件about.hjs为:

代码语言:javascript
复制
<h1>Title: {{ title }}</h1>
{{> part }}
I'm not Joker.

我有两个问题:

  1. 如何正确使用页面中的分词?(此代码不起作用)在不重复文件/routes/index.js

中赋值的情况下,是否可以对两个或更多页面使用相同的“标题”(

致以最好的问候,维。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-10-09 03:36:14

我已经找到了第一个问题的解决方案。

首先,我删除了hjs

代码语言:javascript
复制
npm remove hjs

然后,我安装了hogan-express

代码语言:javascript
复制
npm install hogan-express

此外,我还编辑了app.js

代码语言:javascript
复制
/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

app.engine('html', require('hogan-express'));
app.enable('view cache');

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'html');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('your secret here'));
  app.use(express.session());
  app.use(app.router);
  app.use(require('less-middleware')({ src: __dirname + '/public' }));
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

routes/index.js

代码语言:javascript
复制
exports.index = function(req, res) {
  res.locals = {
    title: 'Title',
  };
  return res.render(
    'index',
    {
      partials:
      {
        part: 'part',
      }
    }
  );
};

现在,在/views中有index.htmlpart.html。文件part.html包含:

代码语言:javascript
复制
<h1>{{ title }}</h1>

文件index.html包含:

代码语言:javascript
复制
{{> part}}
Hello world!

所以,它工作得很好。

票数 25
EN

Stack Overflow用户

发布于 2015-09-09 18:14:36

至少在Express 4+中,分音是开箱即用的。您可以使用带有--hogan或-H选项的快速生成器(来自npm)。

完成此操作后,您需要向render方法添加部分参数:

代码语言:javascript
复制
router.get('/', function(req, res, next) {
  res.render('index', 
        { 
            title: 'My Site',
            partials: {header: 'header'} 
        });
});

然后,在您的模板中使用{{ > xxx }}

代码语言:javascript
复制
<body>
  {{> header }}
  <h1>{{ title }}</h1>

  <p>Welcome to {{ title }}</p>
</body>

注意:这在视图中有header.hjs

票数 6
EN

Stack Overflow用户

发布于 2014-06-19 16:41:23

要将部分参数与express+hogan一起使用,只需执行以下操作:

代码语言:javascript
复制
app.get('/yourRoute', function(req, res){  
   res.render('yourPartial', function(err,html){
       var partialHTML = html;
       res.render('yourMainView', { myPartial: partialHTML }, function(err,html){
          res.send(html);   
       });     
   });
}

现在,yourMainView.html:

代码语言:javascript
复制
<p>Something Something Something</p>
{{{partialHTML}}}
<p>Bla Bla Bla</p>

注意三重“{”,而不是你通常做的双倍!这告诉hogan (胡子)将其解析为HTML而不是字符串!

就这样。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12783615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档