簡體   English   中英

渲染視圖到Node.js中的腳本標簽時如何傳遞變量

[英]How can I pass variable when render view to script tag in 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>

擴展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>

try var user = "{{user}}";

如果您的用戶僅包含字符串

您使用的是Handlebars渲染引擎,正確的語法應為{{@user}} 更多信息

用引號引起來,將這些值轉換為javascript中的變量

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

如果您的變量是一個對象,則應該這樣使用。 如果僅輸入var = {{{user}}},則輸入錯誤,如果輸入var user ='{{user}}',則為字符串。

但是,如果它是一個對象,則必須使用[]進行初始化。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM