[英]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變量
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);
};
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)});
});
<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.