javascript - 使用动态子域表达静态服务
问题描述
我正在尝试使用动态子域进行快速静态工作。
基本上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' })
});
解决方案
您不能动态调用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' })
});
});
推荐阅读
- javascript - Chrome 自动完成锁定输入,就像它们不可点击一样
- typescript - call() 没有返回正确的类型
- php - 未定义的变量项目 laravel,我试图从数据库中读取数据
- r - R group_by - 如何按 orderID 分组?
- camera-calibration - 如图所示,如何校准完全面向彼此的相机?
- java - 如何有条件地链接几个改造调用?
- python - 为什么这个合并排序实现没有给出正确的答案?
- spring-boot - IntelliJ Idea + 无法自动装配。找不到类型的 bean
- vue.js - Vue-multiselect - 如何在占位符中插入 html 代码?
- java - H2事务总是自动提交为什么?