【midwayjs/koa】跨域配置

669 阅读1分钟

最近在尝试nuxt + midway开发SEO友好网站,本地调试遇到跨域问题,原本想在nuxt里配置本地代理,根据文档配置vite就可以,但实践下来没有生效,github里也有一些人提出问题,得到的解决方法都不好使。
一番折腾后,决定放弃研究nuxt的本地代理,直接在midway服务端里配置得了。我使用的是midwayjs/koaminway版本是3.x,跨域实现如下

安装依赖

npm i @midwayjs/cross-domain -S

引入组件

// configuration.ts

import * as crossDomain from '@midwayjs/cross-domain';

@Configuration({
  imports: [
    ...
    crossDomain,
  ],
})

CORS配置

// config.default.ts

 export default {
     // ...
     cors: {
         credentials: false,
     }
 }

cors可配置项

export const cors = {  
// 允许跨域的方法,【默认值】为 GET,HEAD,PUT,POST,DELETE,PATCH  
allowMethods: string |string[];  
// 设置 Access-Control-Allow-Origin 的值,【默认值】会获取请求头上的 origin  
// 也可以配置为一个回调方法,传入的参数为 request,需要返回 origin 值  
// 例如:http://test.midwayjs.org  
// 如果设置了 credentials,则 origin 不能设置为 *  
origin: string|Function;  
// 设置 Access-Control-Allow-Headers 的值,【默认值】会获取请求头上的 Access-Control-Request-Headers  
allowHeaders: string |string[];  
// 设置 Access-Control-Expose-Headers 的值  
exposeHeaders: string |string[];  
// 设置 Access-Control-Allow-Credentials,【默认值】false  
// 也可以配置为一个回调方法,传入的参数为 request,返回值为 true 或 false  
credentials: boolean|Function;  
// 是否在执行报错的时候,把跨域的 header 信息写入到 error 对的 headers 属性中,【默认值】false  
keepHeadersOnError: boolean;  
// 设置 Access-Control-Max-Age  
maxAge: number;  
}

注意:出于安全考虑,跨域配置只能放在开发环境,生产一定要去掉。