简体   繁体   English

使用node.js服务动态.js文件

[英]Serving dynamic .js files with node.js

I'm searching for some kind of 'template/macro engine' for javascript files. 我正在寻找某种javascript文件的“模板/宏引擎”。 What I need to do is serving javascript files to the browser. 我需要做的是将javascript文件提供给浏览器。 These javascript files are mostly static but vary in some ways. 这些javascript文件大多是静态的,但在某些方面有所不同。

Here's what I'm basically doing at the moment: 这是我目前正在做的事情:

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

Now I need to add/replace some few lines of code within the read file before serving it to the client. 现在,我需要在读取文件中添加/替换几行代码,然后再将其提供给客户端。

Update: 更新:

Here are some examples: 这里有些例子:

var host = 'http://mydomain.com/';
var domains = ['mydomain1.com', 'mydomain2.org'];

Yes I could use basic search and replace but I wondered if there's a more generic solution. 是的,我可以使用基本搜索和替换,但是我想知道是否有更通用的解决方案。

I solved it writing my own little render engine as you can see here: http://jsfiddle.net/g5PEp/ 我写了我自己的小渲染引擎解决了这个问题,您可以在这里看到: 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();
        }
    }
};

This is working for me at the moment but I'm a bit sad that this doesn't allow me to write valid javascript code in my templates. 目前,这对我来说是有效的,但令我感到遗憾的是,这不允许我在模板中编写有效的JavaScript代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM