首页 > 解决方案 > 使用动态子域表达静态服务

问题描述

我正在尝试使用动态子域进行快速静态工作。

基本上http://ratty-doll-4811.localhost:3333这个子域是动态的,我根据这个子域加载静态文件夹。

我的问题是 index.html 加载,但与 index.html 位于同一目录中的 app.js 不加载。

const subdomain = require('subdomain');
var app = Express()
app.use(subdomain({ base : 'localhost', removeWWW : true }));
app.get('/subdomain/:url', function(req, res, next) {
  app.use('', Express.static(path.join(__dirname, 'public')));
  res.sendFile('index.html', { root: __dirname + '/public' })
});

这是错误:在此处输入图像描述

标签: javascriptnode.jsexpresssubdomain

解决方案


您不能动态调用app.use(),因为这只会一遍又一遍地建立路由处理程序,它们将无限期地累积并对所有未来的请求有效。但是,您可以从中获取请求处理程序express.static()并自己动态调用请求处理程序。

我不完全遵循您要完成的工作,但这将向您展示如何动态调用它,然后根据它是否找到匹配项采取不同的行动。

// get express.static() handler
let staticHandler = Express.static(path.join(__dirname, 'public'));

app.get('/subdomain/:url', function(req, res, next) {
  staticHandler(req, res, (err) => {
      if (err) return next(err);
      // it only gets here if the staticHandler didn't find a match and send a response
      res.sendFile('index.html', { root: __dirname + '/public' })
  });
});

推荐阅读