cuz*_*AZN 10 javascript templates node.js express pug
问题
如何动态地提供javascript文件?具体来说,脚本维护它的大部分主体,但有一些变量可变(想象一下HTML Jade模板,但这是纯粹的javascript).
脚本
当用户或浏览器(一般是http GET)访问/file.js
传递参数时api
,例如/file.js?api=123456
,我想输出纯粹的javascript,我可以把它123456
放在我的代码里面,动态地.内容类型是application/javascript
.
样品:
var api = #{req.query.api}; //Pseudo
//The rest of my javascripts template
...
Run Code Online (Sandbox Code Playgroud)
从我的主.js文件,我已经设置了路线:
app.get( '/file.js', function( req, res ) {
//Pseudo code that I would like to achieve
var name = req.query.name;
res.render( 'out_put_javascript_file_from_jade_file.jade', { name: name } );
});
Run Code Online (Sandbox Code Playgroud)
因此,当一个人访问时/file.js
,脚本文件将根据api
URL中传递的参数进行不同的呈现.我能想到的唯一可能的动态方式是使用Jade,但它不允许使用纯javascript模板.我相信必须有其他解决方案.
请原谅我的解释.问题有点像这样:如何使用Jade生成纯JavaScript文件
Zla*_*tko 11
如果你想做一些快速而又脏的事情,那么你可以做这样的事情(基于评论中的例子).
App init - 读取.js 模板文件并将其缓存:
// this should be async, but hey, not teaching you that part here yet
var fileJs = fs.readFileSync('file.js.template');
Run Code Online (Sandbox Code Playgroud)
File.js:
(function() {
$(window).on('load', function() {
alert('Your api key is API_KEY_CONST');
});
})();
Run Code Online (Sandbox Code Playgroud)
请求:
GET /api/file.js?key=123
Run Code Online (Sandbox Code Playgroud)
路由器:
app.get('/api/file.js', function(req, res) {
var key = req.query.key;
var key = fetchKeyFromDBSync(); // just to make it easier here, no async.
var out = fileJs.replace(API_KEY_CONST, key);
res.setHeader('content-type', 'text/javascript');
res.write(out);
res.end();
});
Run Code Online (Sandbox Code Playgroud)
现在,这真的很蠢,你不应该在家里尝试,但它只是演示如何做你想要的.
编辑:
根据文件长度,如果将文件块放入数组中,则可能会更好一些,例如:
var fileChunks = ['(function(){ blablabla;', 'var myAPIKey=', 'KEY_PLACEHOLDER', '; alert (myAPIKey);', '})()']
Run Code Online (Sandbox Code Playgroud)
因此,稍后当您使用真实API密钥解析它时,您将加入该文件.
fileChunks[2] = '12345';
var responseData = fileChunks.join('');
res.write(responseData);
Run Code Online (Sandbox Code Playgroud)
但是你最后访问的api密钥然后保存在一个数组中.不太适合未来的证据,但如果你需要快速的东西,那就会产生影响.
归档时间: |
|
查看次数: |
7134 次 |
最近记录: |