nodeJS替换一个文件中的多个值

时间:2017-05-20 23:46:51

标签: node.js express fs writefile

我想用占位符替换现有文件中的N个值。

当触发ExpressJS App中的发布请求时,必须更改文件中的占位符值。

例如SASS文件:

$textColor: ##textColor##;
$backgroundColor: ##backgroundColor##;

我的功能在1次替换时效果很好:

router.post('/', function(req, res) {

    fs.readFile('main.scss', 'utf8', (err, data) => {
        if(err) {
            console.log('An error occured', err);
        }

        backgroundColorToReplace = data.replace(/##backgroundColor##/g, 
        req.body.backgroundColor);
        // This value has to be replaced as well
        textColorToReplace = data.replace(/##textColor##/g, req.body.textColor);

        fs.writeFile('main.scss', backgroundColorToReplace, (err) => {
            if(err) {
                 console.log('An error occured', err);
            }

            console.log('Colors successfully changed');
        });
    });

    res.json({
        textColor: req.body.textColor,
        backgroundColor: req.body.backgroundColor
    });
});

我该如何解决这个问题?有办法吗?

1 个答案:

答案 0 :(得分:4)

好吧,你没有在同一个数据集上执行replace(),而且你只记下第一次更改。 Javascript字符串是不可变的,因此.replace()不会更改原始数据。尝试保留公共数据容器:

// ...

data = data.replace(/##backgroundColor##/g, req.body.backgroundColor);
data = data.replace(/##textColor##/g, req.body.textColor);

fs.writeFile('main.scss', data, (err) => {

// etc.