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

How can I pass variable when render view to script tag in Node.js

本文关键字:js Node 脚本 视图 变量      更新时间:2023-09-26

我将hbs与html一起用作模板引擎。这是我的背景。

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

在我的路线.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>

扩展ting-y的答案。

如果user是数字或布尔值:

var user = {{user}};

如果user是字符串:

var user = "{{user}}";

如果用户是一个对象或数组,请将其转换为url编码的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)});
});

主页.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>

尝试var user = "{{user}}";

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

您使用的是Handlebars渲染引擎,正确的语法是{{@user}}更多信息

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

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

如果变量是对象,则应该这样使用。如果只键入var={{user}},则会出现错误。

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

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