Express-充当静态服务器之前先编辑HTML

时间:2019-07-16 12:41:00

标签: javascript node.js express

在致电expressApp.use(express.static(path.join(__dirname, '/../frontend/dist')));之前,我需要修改html代码。我基本上需要做的是在两个中间件函数中插入元标记。我想出了怎么做。但是用我的解决方案,我在另一个内部调用了中间件函数。

app.js

let frontend = await fs
  .readFileSync(path.join(__dirname, '/../frontend/dist/index.html'))
  .toString('utf8');

expressApp.use((req, res, next) => {
  //...
  frontend = frontend.replace(
    '<meta device="ABC" />',
    '<head><meta device="' + deviceId + '"/>'
  );
  next();
});

expressApp.use((req, res, next) => {
  const language = req.get('language') || 'en_GB';
  logger.info('language:' + language);
  this._languageModule.setLanguage(language);
  frontend = this._languageModule.insertSIDs(frontend);
  logger.info(frontend);
  expressApp.use(express.static(path.join(__dirname, '/../frontend/dist'))); // nested middleware function
  next();
});

/** set up all the express routes **/
expressApp.get('/', (req, res) => {
  res.send(frontend);
});

编辑

如果我不打电话给expressApp.use(express.static(path.join(__dirname, '/../frontend/dist')));嵌套-像这样:

expressApp.use((req, res, next) => {
  const language = req.get('language') || 'en_GB';
  logger.info('language:' + language);
  this._languageModule.setLanguage(language);
  frontend = this._languageModule.insertSIDs(frontend);
  logger.info(frontend);
  next();
});

expressApp.use(express.static(path.join(__dirname, '/../frontend/dist')));

HTML不会被修改。

1 个答案:

答案 0 :(得分:1)

您可能应该编写自己的中间件来处理文件的修改。这是一个未经测试的示例。但这很粗糙。它基于$(document).on("click", ".edu_add_button", function () { ... ... ... ... $(".deg_date").datepicker("setDate", currentDate); }); 函数

.content {
  position: unset !important;
  width: 100% !important;
  padding: 20px;
}

对于原始资源,请查看以下github页面: https://github.com/expressjs/serve-static/blob/master/index.js