用nodejs服务dynamicJavaScript文件

问题

如何dynamic提供JavaScript文件? 具体来说,脚本保持其大部分的身体,但一些variables变化(想象HTML Jade模板,但这是纯JavaScript)。

脚本

当用户或浏览器(通常HTTP GET)访问/file.js传递参数api ,例如/file.js?api=123456 ,我想输出纯粹的JavaScript,我可以把123456放在我的代码里面,dynamic。 内容types是application/javascript

样品:

 var api = #{req.query.api}; //Pseudo //The rest of my javascripts template ... 

从我的主要.js文件,我已经build立了路线:

 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 } ); }); 

所以当一个人访问/file.js ,脚本文件将根据URL中传递的参数api不同而呈现。 我能想到的唯一可能的dynamic方式是使用Jade,但它不允许纯JavaScript模板。 我相信还有其他的解决办法。

请原谅我的解释。 问题有点像这样: 如何用Jade生成纯JavaScript文件

如果你想做一些快速和肮脏的事情,那么你可以做这样的事情(根据你的例子在评论中)。

App init – 读取.js 模板文件并caching它:

 // this should be async, but hey, not teaching you that part here yet var fileJs = fs.readFileSync('file.js.template'); 

File.js:

 (function() { $(window).on('load', function() { alert('Your api key is API_KEY_CONST'); }); })(); 

请求:

 GET /api/file.js?key=123 

路由器:

 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(); }); 

现在,这真是愚蠢,你不应该在家里尝试,但它只是演示如何做你想要的。

编辑:

根据文件的长度,如果将文件的块放入数组中,可能会更好一些:

 var fileChunks = ['(function(){ blablabla;', 'var myAPIKey=', 'KEY_PLACEHOLDER', '; alert (myAPIKey);', '})()'] 

所以,稍后当您用真实的API密钥解决问题时,您可以join文件。

 fileChunks[2] = '12345'; var responseData = fileChunks.join(''); res.write(responseData); 

但是你最后访问的api键然后被保存在一个数组中。 不是很有前途的证据,但是如果你需要一些快速的东西,它就会起作用。