NodeJS readFile找到占位符并替换,Handlebars js也是一个选项,如果需要

vwkv1x7d  于 2023-04-29  发布在  Node.js
关注(0)|答案(1)|浏览(96)

我当前使用fs在node中加载一个文件。readFileSync:
const filename = 'test.html'; const html_code = fs.readFileSync(/var/www/vhosts/example.com/httpdocs/html/${filename},'utf8');
在test.html中,我有这个div:

<div id="g-ai0-1" class="g-Text g-aiAbs g-aiPointText" style="top:59.6648%;margin-top:-14.2px;left:49.9587%;margin-left:-46px;width:92px;">
    <p class="g-pstyle0">{{ Text }}</p>
</div>

我可以在html中搜索{{ Text }}字符串并将其替换为其他字符串吗?我试过这个:

html_code.replace('{{ Text }}', 'new string');

这不起作用,我也试过:

const html_code = fs.readFile(`/var/www/vhosts/example.com/httpdocs/html/${filename}`, 'utf8', (err, data) => {
      if(err) {
          res.send(`this is the error: ${err}`);
          console.error(err)
          return
      }
      data.replace('{{ Text }}', 'new string');
      return data;
  });

但也不管用。我如何才能做到这一点或没有一个引擎一样的车把?

r3i60tvu

r3i60tvu1#

fs.readFileSync()不接受第三个回调参数,它是同步的,并直接返回到您分配的html_code变量。(接受3个参数的是fs.readFile(),但它是异步的。)
另外,JS中的String.prototype.replace()只替换第一个示例,试试regex:/{{ Test }}/g,其中g是全局替换的标志。该函数也不会就地替换字符串,而是返回一个新的字符串,并替换了子字符串。下面的代码应该可以正常工作:

try {
  const html_code = fs.readFileSync(
    `/var/www/vhosts/example.com/httpdocs/html/${filename}`,
    'utf8'
  );
  const replaced_html = html_code.replace(/{{ Text }}/g, 'new string');
  // Do something with your replaced HTML
} catch (err) {
  res.send(`this is the error: ${err}`);
  console.error(err);
  return;
}

相关问题