前端/移动开发面试题更新 2026-08-05

请说明在 Express 框架中,针对子域和虚拟主机的支持与处理方式有哪些?

前端/移动开发风险判断系统设计技术原理ExpressNode.js

考察说明

考察对 Express 路由和中间件机制的理解,以及处理多域名或子域请求的实际能力。

回答思路

  1. 【回答框架 1】在 Express 中,子域和虚拟主机主要通过中间件或路由的域名匹配来实现。Express 本身不直接提供子域路由,但可以通过检查请求的 Host 头或使用 app.use 结合正则表达式来区分不同子域。
  2. 【回答框架 2】常见做法是使用 vhost 中间件,它允许将特定子域或域名的请求映射到独立的 Express 应用或路由处理函数。例如,vhost('admin.example.com', adminApp) 会将 admin 子域的请求交给 adminApp 处理。
  3. 【回答框架 3】另一种方式是在自定义中间件中解析 req.hostname,然后根据子域值重定向或分配处理逻辑。可以结合 app.use 的回调中判断 req.subdomains 数组,该数组按从右到左的顺序包含子域部分。
  4. 【回答框架 4】对于虚拟主机,如果多个域名指向同一个 Express 应用,可以在入口处根据 req.hostname 分发到不同路由或模块,确保各域名独立配置。使用 vhost 模块更清晰,便于维护。
  5. 【回答框架 5】需要注意 HTTPS 和安全 Cookie 的域名设置,子域间共享会话或数据时需明确 domain 范围。性能上,过多的域名判断可能影响效率,建议使用高效匹配或缓存域名映射。
  6. 【关键点 1】Express 通过 req.hostname 和 req.subdomains 访问请求域名信息。
  7. 【关键点 2】vhost 中间件是处理多子域的标准方案,支持模块化路由。
  8. 【关键点 3】自定义中间件可灵活实现域名分发,但需注意性能和安全性。
  9. 【关键点 4】虚拟主机可通过域名映射到不同处理逻辑,保持应用结构清晰。
  10. 【关键点 5】子域间通信或共享状态需明确域名边界,防止数据泄露。
  11. 【易错点 1】仅依赖 req.subdomains 可能因代理设置导致错误,需正确配置 trust proxy。
  12. 【易错点 2】子域匹配时可能将伪造的 Host 头用于路由,需验证域名合法性。
  13. 【易错点 3】使用 vhost 时若未正确挂载应用,可能导致中间件执行顺序混乱。