【问题标题】:Using hbs and getting error of "Arguments to path.join must be strings"?使用 hbs 并出现“path.join 的参数必须是字符串”的错误?
【发布时间】:2014-09-05 17:47:05
【问题描述】:

我想使用 hbs 和 express 将一些模板应用于 JSON 数据(最终将从 url 获取数据)。作为一个使用 express 4 的新手,我发现很多以前的帖子和解决方案确实令人困惑,因为 express 4 中的某些功能已被贬值。我结合了一些 sn-ps 代码并得到了如下结果:

  var engines = require('consolidate');
  var express = require('express');
  var hbs = require('hbs');
  app = express();


    app.set('views', __dirname+ '/views');
    app.set('view engine', 'hbs');
    app.set("view options", { layout: true });


  // ROUTES
      app.get('/', function (req, res){ 
    var data = {"employees":[
      {"firstName":"John", "lastName":"Doe"}, 
      {"firstName":"Anna", "lastName":"Smith"},
      {"firstName":"Peter", "lastName":"Jones"}
  ]}


          res.render('index', JSON.stringify(data));
      }); 

      app.listen(3000);

我也试过在 res.render 中放一个简单的字符串,比如

         res.render('index', 'haha');

但它仍然不起作用。 请问有什么见解吗..?

编辑: 我的模板目录是

        views
            - index.hbs

而我其实只放了

         <hi> Hi </h1>

在这个文件中。

【问题讨论】:

    标签: javascript json node.js express handlebars.js


    【解决方案1】:

    render的第二个参数是一个对象,不是字符串。只需通过data

    编辑:您还设置了layout: true,但您没有 layout.hbs。将其设置为 false 并且您的 index.hbs 应该会呈现。

    Edit2:完整的工作示例

    index.js

    var engines = require('consolidate');
    var express = require('express');
    var hbs = require('hbs');
    app = express();
    
    
    app.set('views', __dirname + '/views');
    app.set('view engine', 'hbs');
    app.set("view options", { layout: false });
    
    
    // ROUTES
    app.get('/', function (req, res){
        var data = {
            "employees":[
                {"firstName":"John", "lastName":"Doe"},
                {"firstName":"Anna", "lastName":"Smith"},
                {"firstName":"Peter", "lastName":"Jones"}
            ]
        };
    
        res.render('index', data);
    });
    
    app.listen(3000);
    

    views/index.hbs

    {{#each employees}}
        Name: {{firstName}}<br>
    {{/each}}
    

    【讨论】:

    • 刚试过 res.render('index', data);但仍然出现相同的错误:TypeError: Arguments to path.join must be strings
    • 请同时发布您的模板。
    • 这太棒了!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    相关资源
    最近更新 更多