Hapi 17版本后如何启用CORS?v18+语法变更后的配置疑问
Hapi v18+ 正确启用CORS的配置方法
全局CORS配置(所有路由通用)
Hapi v18+ 依然支持全局配置CORS,但相比旧版本,显式声明允许的来源会更稳妥——这也是很多人遇到配置不生效的核心原因。示例代码:
const server = Hapi.server({ port: 3000, host: 'localhost', routes: { cors: { origin: ['*'], // 测试场景允许所有域名,生产环境建议替换为具体可信域名 additionalHeaders: ['X-Requested-With'] // 按需添加允许的自定义请求头 } } });
如果是简单测试场景,也可以直接写cors: true,但复杂请求(如带自定义头)可能需要显式配置才能触发正确的CORS响应头。
单路由单独配置CORS
针对单个路由配置时,仅写cors: true经常会不生效,因为Hapi v18+对默认规则做了收紧,需要明确指定允许的来源。正确示例:
{ method: "GET", path: "/getCountyByState/{state}", options: { cors: { origin: ['*'], // 替换为你的前端实际域名,比如['https://your-frontend.com'] credentials: true // 如果需要前端携带Cookie或认证信息,必须开启此项 } }, handler: async function (request, h) { request.log('error', 'Event error'); // 记得补充handler的返回逻辑,比如 return h.response({ data: ... }); } }
常见坑点提示
- 前端发送跨域请求时如果带了凭证(如Cookie),后端必须设置
credentials: true,同时前端要开启withCredentials。 - 生产环境绝对不能用
origin: ['*'],必须指定具体的可信域名,避免跨域安全风险。
内容的提问来源于stack exchange,提问作者Not a machine
相关产品推荐
相关产品推荐

