如何在渲染视图到Node.js中的脚本标记时传递变量

时间:2015-04-06 11:30:35

标签: javascript html node.js

我正在使用hbs作为模板引擎和html。 这是我的设置。

app.set('view engine', 'html');
app.engine('html', hbs.__express);

在我的route.js

router.get('/home', isAuthenticated, function(req, res){
    res.render('home', { 
        user: data something });
});

在我的home.html中,我想使用用户变量作为模板而不是做某事

<script>
    var user = {{user}}; // It don't recognize user variable
    /* do something about user variable */
</script>

4 个答案:

答案 0 :(得分:5)

扩展 ting-y 的答案。

如果user是数字或布尔值:

var user = {{user}};

如果user是字符串:

var user = "{{user}}";

如果user是对象或数组,请将其转换为urlencoded JSON字符串并使用:

var user = JSON.parse(decodeURI("{{user}}");

标准方法

我喜欢这种使用handlbars渲染javascript变量的更简洁的方法

json_utils.js

function tryParseJSON (jsonString){
    try {
        var o = JSON.parse(jsonString);

        if (o && typeof o === "object") {
            return o;
        }
    }
    catch (e) { }

    return null;
}


module.exports.safeJSONParse =tryParseJSON;

module.exports.encodeJSON =  function(obj) {

    obj = JSON.stringify(obj);

    return encodeURI(obj);
};

module.exports.decodeJSON = function(obj) {

    obj = decodeURI(obj);

    console.log(obj);

    return tryParseJSON(obj);
};

app.js

var express = require("express"),
    jsonUtils = require("./json_utils");
var app = express();

app.get("/",function(req,res) {

          var data = {
                 "name" : "John Doe",
                 "age" : 18,
                 "isAlive" : false,
                 "emergencyContacts" : [999999999,888888888,777777777]
          };

          res.render("home",{ "data" : jsonUtils.encodeJSON(data)});

});

home.handlebars

<script src="/utils_json_client.js"></script>
<script>
        var data = jsonDecode("{{data}}");
        console.log(data);
         // {
         //    "name" : "John Doe",
         //    "age" : 18,
         //    "isAlive" : false,
         //    "emergencyContacts" : [999999999,888888888,777777777]
         //}
<script>

答案 1 :(得分:1)

尝试font-size: 0

如果您的用户只包含字符串

答案 2 :(得分:0)

您正在使用Handlebars渲染引擎,正确的语法为{{@user}} more info

用引号将它们包围起来,将这些值转换为javascript中的变量

<script>
    var user = "{{@user}}";
</script>

答案 3 :(得分:0)

如果变量是一个对象,则应该这样使用。如果您只输入var = {{{user}},则将输入一个错误。如果输入var user ='{{user}}',则将是一个字符串。

但是,如果它是一个对象,则必须使用[]进行初始化。

var user = ['{{user}}'];