CORS(Cross-origin resource sharing)是指在浏览器端,某个网页的脚本向其他域名(网站)的服务器发起 HTTP 请求,通常情况下,这样的跨域请求是被浏览器禁止的,这是为了防止潜在的安全问题。不过,有些时候,我们确实希望客户端能够发送这样的跨域请求,比如前后端分离的开发模式中,前端通过 AJAX 请求后端接口。这时候,我们就需要在后端做一些处理来支持跨域请求。
在 Hapi 中,支持 CORS 请求也很简单,首先,我们需要使用 hapi-cors-headers 插件来实现跨域请求头的设置,其次,我们需要在路由的处理函数中添加自定义的处理逻辑。下面,我们将分别介绍这两个步骤。
hapi-cors-headers 插件的使用
hapi-cors-headers 是一个专门用于实现跨域请求头设置的 Hapi 插件,安装方式如下:
npm install --save hapi-cors-headers
然后,在 Hapi 应用程序中注册该插件,并进行相关配置:
-- -------------------- ---- ------- ----------------- ------- ----------------------------- -------- - -------- ------ -- ----------- ------ -------- ------- ---- ---------- -- --- ---- -- -------- ---------- ---------------- --------------- ----------------- -- -------- --------------- -------------------- ------------------------ -- ------ ------- ----- -- ----------- ------------ ---- -- -------- ------ - ---
以上代码中,options 参数用于指定跨域请求相关的配置,其中:
- origins:指定允许跨域的域名,* 表示所有域名。
- methods:允许的 HTTP 动词。
- headers:允许额外的请求头。
- exposedHeaders:允许的响应头。
- maxAge:预检的有效期,单位是秒。
- credentials:是否允许发送跨域 Cookie。
这样,我们就完成了跨域请求头的设置工作,接下来就是对请求的处理逻辑。
自定义路由处理函数中的跨域处理
在 Hapi 应用中使用插件就像在 Express 中使用中间件一样,使用起来很简单。按照一般的逻辑,我们可以在路由处理函数中进行跨域请求的处理,例如:
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- ------ - --- ------------- ----- ---- --- -------------- ------- ------ ----- ---- -------- ----------------- -- - ----- -------- - ------------ -------- ------ ------- --- ---------------------------------------------- ----- -- ----- ------ --------- - --- ----- -------- ------- - ----- --------------- ------------------- ------- --- --------------------- - --------
在处理函数中,我们使用 h.response() 函数创建响应对象,然后使用 response.header() 方法添加响应头,这样客户端就能够正确地接收到响应头,从而完成跨域请求。
不过,上面的处理方式是比较繁琐的,我们可以使用 Hapi 的一个特性 —— hooks 来实现更为简单的跨域处理。
server.ext('onPreResponse', (request, h) => { const response = request.response; if (response.isBoom) { return h.continue; } response.header('Access-Control-Allow-Origin', '*'); // 设置响应头 return h.continue; });
这样,我们就可以在所有响应中添加跨域请求头了,非常方便。这种处理方式基于 Hapi 的 hooks 机制,可以在整个请求-响应的生命周期中添加自己的处理逻辑,从而实现灵活的跨域请求处理。
总结
本文介绍了在 Hapi 中实现跨域请求的相关内容。通过使用 hapi-cors-headers 插件来设置跨域请求头,并通过 hooks 的方式在路由处理函数中添加自定义处理逻辑,可以有效地完成跨域请求的问题。对于前后端分离的开发模式,跨域请求已经成为常规操作,通过这篇文章的学习和实践,相信大家已经能够非常熟练地来处理跨域请求了。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645736f0968c7c53b0a02b65