如何使用节点fs将代码段附加到HTML

时间:2017-05-23 06:18:56

标签: javascript node.js fs

我想使用node fs命令行工具将代码段添加到html文件中。 我看到了这个解决方案how to append to a file on particular position using node.js?,但它使用了附加到文件的位置。

我有这个html代码段

<html><body><h1>hello world</body></html>

我想追加

<script>console.log('hello world')</script> 
在关闭身体标签之前

。 我希望输出像这样

<html><body><h1>hello world</h1><script>console.log('hello world')</script></body></html>

3 个答案:

答案 0 :(得分:2)

为什么不使用正则表达式?

fs = require('fs')
fs.readFile('./test.html', 'utf8', function (err,data) {
  if (err) {
    return console.log(err);
  }
  var toPrepand = "<script>console.log('hello world')</script>";
  data = data.replace(/\<\/body>/g, toPrepand + '</body>');
  console.log(data);
});

您不必考虑在</body>标记之前放置的位置 - 因为您已经说过了。

之后只需将新数据写入该HTML文件即可。

如果您还想知道如何直接编写文件:

var fs = require('fs')
fs.readFile('./test.html', 'utf8', function (err,data) {
  if (err) {
    return console.log(err);
  }

  var toPrepand = "<script>console.log('hello world')</script>";
  var result = data.replace(/\<\/body>/g, toPrepand + '</body>');

  fs.writeFile('./test.html', result, 'utf8', function (err) {
     if (err) return console.log(err);
  });
});

有很多选项可以做 - 找到位置或使用HTML parser或简单地用字符串替换该字符串。

答案 1 :(得分:1)

您可以使用简单的字符串操作来实现此目的:

var initialString = '<html><body><h1>hello world</body></html>';
var insert = '<script>console.log("hello world")</script>';

然后使用indexOf找到位置:

var pos = initialString.indexOf('</body>');

切割并连接字符串:

var output = [initialString.slice(0, pos), insert, initialString.slice(pos)].join('')

当然使用输出: - )

如果你想要更具伸缩性的东西,你也可以看看Node的任何HTML解析器/虚拟DOM实现(比如jsdom https://github.com/tmpvar/jsdom

答案 2 :(得分:0)

我想使用&#39; cheerio&#39;节点包来做。 https://github.com/cheeriojs/cheerio

这非常有用,就像使用jQuery一样。