[英]Express/Node.js : Render custom javascript as response
在我的應用程序中,我需要提供一個 API(類似於 Google Maps javascript API),通過它我可以發送一些自定義 javascript(帶有一些會話和請求相關信息)作為響應。 然后使用 javascript 在 UI 上繪制一些圖形。 我使用 Express with Jade 作為我的模板引擎。 我目前使用的代碼是:
app.use('/graph',function(req, res){
//send out graph data
var var_name = req.session.var_name //fetch something from session
var graphData = fetchGraphData(req.query.graph); //function that fetches graph data
res.contentType("text/javascript");
res.render(__dirname + '/views/graph.jade', {
title: "Title", queryStr: JSON.stringify({var_name: var_name, graphData: graphData })
});
});
和玉文件:
| some_var_name = {
| initGraph : function(divId){
| //some code here
| var graphData = !{graphData}
| // do something
作為一種解決方法,我用|
開始了 jade 文件的每一行。 ,這樣 jade 將文本解析為純文本,並且不添加任何 html 標簽! 它工作正常,但有沒有更干凈的方法來做到這一點? 解決方案可能會或可能不會使用 Jade!
您應該查看下划線模板 。 我認為,為了生成任意文本輸出,它會更清潔。 Jade專門用於呈現HTML。
你也可以試試Mustache或Handlebars 。
根據您的評論,我發現您希望繼續使用res.render
來呈現模板。 consolodate.js為Express增加了對所有主要模板引擎的支持。 包括@TheHippo提到的Underscore模板,Handlebars,Moustache和Dust。
您可以嘗試在模板外部的單獨模塊中定義需要發送到瀏覽器的JavaScript函數,從“關注點分離”的角度來看,這可能是更正確的方法。 此外,如果函數在單獨的模塊中定義,則可以在服務器和瀏覽器中使用它們。
然后你可以使用toString()方法將函數轉換為字符串,或者在調用模板的函數中或在模板內部,如果它支持純JavaScript,那么下划線,EJS和doT模板(我嘗試了下划線和EJS並最終使用了doT,這不僅是最快但功能多樣的 - 請查看它:
JS代碼:
// if you send the same functions you may want to convert them to strings in advance
var data = {
funcStr: func.toString();
};
res.render(view, data);
模板(doT):
<script type="text/javascript">
func = {{= it.funcStr }};
// now you can call it here if you want but I would use
// separate JavaScript files
func();
</script>
我使用它將預先編譯的模板與第一頁加載的頁面一起發送到瀏覽器,但我認為它也可以在你的情況下使用。
作為一個附帶問題,為什么不能將所有這些函數捆綁在一個單獨的JavaScript模塊中並將它們作為普通腳本文件加載?
您可以使用https://www.npmjs.com/package/rendercustomjs包,它工作正常,但在 ejs 模板中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.