如何从路由模块

时间:2017-01-07 22:32:55

标签: node.js express

我正在用快速平台学习nodejs。我生成了一个快速项目,我编辑了2个路由文件。一个路由文件是“users.js”,它应该在请求'/ users'时呈现layou.hbs,另一个是“index.js”,并且当请求'/'时它应该呈现“home.hbs”。问题是,当在URL框上请求'/'时,我在浏览器上获得layout.hbs输出。我究竟做错了什么? 这是文件中的代码。

  1. index.js
  2. var express = require('express');
    var router = express.Router();
    
    /* GET home page. */
    router.get('/', function(req, res, next) {
      res.render('home', {title:Express});
    });
    module.exports = router;

    1. user.js的
    2. var express = require('express');
      var router = express.Router();
      
      router.get('/users', function(req, res, next) {
          res.render('layout', {title:Express});
        	//res.send('respond with a resource');
      });
      
      module.exports = router;

      1. Home.hbs
      2. </!DOCTYPE html>
        <html>
        <head>
        	<title></title>
        </head>
        <body>
        	<p>goodbye World</p>
        </body>
        </html>

        1. layout.hbs
        2. </!DOCTYPE html>
          <html>
          <head>
          	<title></title>
          </head>
          <body>
          
          	<p> Hello World!</p>
          
          </body>
          </html>

          如果我访问localhost:3000,我希望看到“再见世界”,但我看到“你好世界”,这段代码有什么问题?谢谢。

3 个答案:

答案 0 :(得分:0)

在您正在呈现'home'的两个文件中。在第res.render('home', {title:Express});

在user.js中执行以下操作:

res.render('layout', {title:Express});

干杯:)

答案 1 :(得分:0)

你应该记得要求express-hbs并告诉express使用它。您的主app.js或您提供该文件的任何其他名称应如下所示。

var http = require('http');
var express = require('express');
var hbs = require('express-hbs'); //load handlebars
var app = express();

// setup hbs view engine 
app.set('view engine', 'hbs');

//location of your views folder
app.set('views', __dirname + '/views');


http.createServer(app).listen(3000);

答案 2 :(得分:0)

无论您渲染什么模板,它都会作为布局的主体加载。为此,您的布局应如下所示:

</!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>

	{{{body}}}

</body>
</html>

实际的身体内容应该放在您渲染的模板中

home.hbs

  <p> Hello World!</p>

goodbye.hbs

  <p> Goodbye World!</p>

这样做

 res.render('home');

在渲染时会显示“ hello world”

 res.render('goodbye');

将显示“再见的世界”

如果您想使用其他布局来包装给定的模板,则可以覆盖默认设置:

  res.render('other', {layout: 'other_layout'});

顺便说一句,将变量“ title”传递为

 {title: Express}

什么也没有。未声明“ Express”变量。您应该改用定义的变量或传递字符串文字

 {title: 'Express'}

并且,要使其在生成的HTML中显示,布局将按以下方式使用它:

</!DOCTYPE html>
<html>
<head>
	<title>{{title}}</title>
</head>
<body>

	{{{body}}}

</body>
</html>

请注意,主体部分有3个花括号,而模板变量仅使用2个。