我正在为 javascript 文件搜索某种“模板/宏引擎”。 我需要做的是向浏览器提供 javascript 文件。这些 javascript 文件大部分是静态的,但在某些方面有所不同。
这是我目前基本上在做的事情:
app.get('/api/api.js', function (req, res) {
fs.readFile(
path.join(__dirname, './libraries/api.js'),
{ encoding: 'utf8' },
function (err, data) {
if (err) throw err;
res.set('Content-Type', 'text/javascript');
res.send(data);
});
});
现在我需要在读取文件中添加/替换几行代码,然后再将其提供给客户端。
更新:
这里有一些例子:
var host = 'http://mydomain.com/';
var domains = ['mydomain1.com', 'mydomain2.org'];
是的,我可以使用基本的搜索和替换,但我想知道是否有更通用的解决方案。
最佳答案
我通过编写自己的小型渲染引擎解决了这个问题,如您所见:http://jsfiddle.net/g5PEp/
var ApiRenderer = function(fileContent) {
var fileContent = fileContent || '';
var data = {};
function sourroundString(str, char) {
char = char || '\'';
return char + str + char;
}
function render() {
var result = fileContent,
str;
for(var key in data) {
var substr = '/*{{' + key + '}}*/';
if(typeof data[key] === 'string') {
str = sourroundString(data[key]);
}
if(Object.prototype.toString.call( data[key] ) === '[object Array]') {
str = '[';
for(var i = 0; i < data[key].length; i++) {
str += sourroundString(data[key][i]);
if(i !== data[key].length - 1) {
str += ',';
}
}
str += ']';
}
result = result.replace(substr, str);
}
return result;
}
return {
setData: function(key, value) {
return data[key] = value;
},
render: function() {
return render();
}
}
};
目前这对我有用,但我有点难过,因为这不允许我在模板中编写有效的 javascript 代码。
关于javascript - 使用 node.js 提供动态 .js 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19907990/