gpt4 book ai didi

javascript - 使用 nodejs 提供动态 javascript 文件

转载 作者:IT老高 更新时间:2023-10-28 23:20:32 25 4
gpt4 key购买 nike

问题

如何动态提供 javascript 文件?具体来说,脚本保留了它的大部分主体,但有一些变量是可变的(想象一下 HTML Jade 模板,但这是针对纯 javascript 的)。

场景

当用户或浏览器(一般为http GET)访问/file.js 传递参数api,例如/file.js?api=123456,我想输出纯 javascript,我可以在其中动态地将 123456 放入我的代码中。 Content-Type 是 application/javascript

示例:

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

从我的主 .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 } );

});

所以当人访问/file.js时,脚本文件会根据URL中传入的参数api进行不同的渲染。我能想到的唯一可能的动态方式是使用 Jade,但它不允许纯 JavaScript 模板。我相信一定有其他解决方案。

请原谅我的解释。问题有点像这样:How to generate a pure JavaScript file with Jade

最佳答案

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

App init - 读取 .js 模板 文件并缓存它:

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

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

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

编辑:

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

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

所以稍后当您使用真正的 API key 解决它时,您可以加入该文件。

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

但是您最后访问的 api key 会保存在一个数组中。不完全是 future 的证明,但如果你需要快速的东西,它应该可以工作。

关于javascript - 使用 nodejs 提供动态 javascript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26094297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com