javascript - 使用 node.js 提供动态 .js 文件

标签 javascript node.js

我正在为 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/

相关文章:

node.js - 如何在 Mongoose 中按子文档字段对记录进行分组?

javascript - 如何更改 javascript 中的\"back to "?

php - AJAX PHP 条件逻辑无法正确评估

javascript - 使用 javascript 过滤器从数组中删除元素

node.js - Twilio 11200 HTTP 检索失败——这是什么意思?

sql-server - Sailsjs 与 Sails-SqlServer 和 Waterline ORM

node.js - 如何在 Mac 中使用命令行工具在 Windows Azure 云服务上部署 NodeJ

php - 为在另一个网页中加载的网页添加后退按钮

javascript - 如何判断websocket onmessage参数的类型?

javascript - 谷歌浏览器 - 如何在后台打开新窗口