兩種常用的跨域設(shè)置

nodejs服務(wù)器端跨域設(shè)置

使用一個中間件

app.use(async (ctx,next)=> {
    // * 表示允許所有域名訪問,可以設(shè)置指定的域名
    ctx.set('Access-Control-Allow-Origin', '*');
    await next();
})

更為復(fù)雜一點的跨域中間件如下:

module.exports = app => {
  // 跨域設(shè)置
  app.use(async (ctx, next) => {
    // 跨域設(shè)置
    ctx.set("Access-Control-Allow-Origin", "*");
    // 請求頭設(shè)置
    ctx.set(
      "Access-Control-Allow-Headers",
      `Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild,x-token,sessionToken,token`
    );
    ctx.set("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS");
    // 一天內(nèi)不會發(fā)送options請求
    // ctx.set('Access-Control-Max-Age', '86400');
    // 預(yù)請求處理
    if (ctx.method == "OPTIONS") {
      ctx.body = 200;
    } else {
      await next();
    }
  });
};

webpack設(shè)置跨域

  1. 我們的服務(wù)器域名是 http://132.232.94.151:3005,而我們本地跑的服務(wù)端口域名為http://localhost:8082

這時候我們本地的項目去訪問遠程的接口就是跨域了,會出現(xiàn)如下提示

Access to XMLHttpRequest at 'http://132.232.94.151:3005/goods' from origin 'http://localhost:8082' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
  1. 如果服務(wù)器沒有設(shè)置跨域,我們可以在webpack去設(shè)置跨域,具體做法如下:

.env.development 配置

VUE_APP_URL="/api"   // 即使我們的接口地址沒有api,也是這樣寫,后面有說明

axios的攔截器使用 process.env.VUE_APP_URL獲取上面環(huán)境配置的地址

const service = axios.create({
  baseURL: process.env.VUE_APP_URL, // api 的 VUE_APP_URL
  timeout: 50000 // 請求超時時間(因為需要調(diào)試后臺,所以設(shè)置得比較大)
});
  1. 項目根目錄vue.config.js(若沒有就創(chuàng)建)配置跨域

    module.exports = {
      devServer: {
        proxy: {
    
         // 只要請求地址有'api'都會匹配上 
    
         // 只要請求地址有'api'都會匹配上 
    
          "/api": {
            target: "http://132.232.94.151:3005",
            ws: true,
            changeOrigin: true,
            pathRewrite: {
              "^/api": "" //通過pathRewrite重寫地址,將前綴/api轉(zhuǎn)為/
            }
          }
        }
      }
    }
    
  2. 我們的vue項目里有如下請求

     created() {
        let url = "/goods";
        this.$axios
          .get(url)
          .then(result => {
            console.log("result", result);
          })
          .catch(err => {
            console.log("err", err);
          });
      }
    
  3. 查看我們的控制臺的network發(fā)現(xiàn),我們發(fā)送了這樣的一個請求

    http://localhost:8082/api/goods
    
  4. 很神奇的是我們竟然拿到了數(shù)據(jù),原因就是,上面我們配置的proxy(代理的意思),當我們發(fā)送請求```http://localhost:8082/api/goods``,這個代理插件發(fā)現(xiàn)我們的請求帶有'api',它就我們把這個請求轉(zhuǎn)發(fā)到http://132.232.94.151:3005, 同時下面的這個配置

    pathRewrite: {
    
     "^/api": "" //通過pathRewrite重寫地址,將前綴/api轉(zhuǎn)為/
    }
    

    能幫我們把/api 變?yōu)?,所以我們請求 http://localhost:8082/api/goods, 最后實際上我們請求的是 http://132.232.94.151:3005/goods
    "^/api": "" //通過pathRewrite重寫地址,將前綴/api轉(zhuǎn)為/
    }

    
    能幫我們把/api 變?yōu)?,所以我們請求  http://localhost:8082/api/goods, 最后實際上我們請求的是 http://132.232.94.151:3005/goods
    
    
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • nodejs服務(wù)器端跨域設(shè)置 使用一個中間件 更為復(fù)雜一點的跨域中間件如下: webpack設(shè)置跨域 我們的服務(wù)器...
    胡儒清閱讀 1,895評論 0 4
  • 一、項目背景簡介 如果你是在使用Vue在做前端項目,那么你肯定對Vue和Node的組合不陌生。無論是在實際的項目中...
    振禮碩晨閱讀 2,307評論 0 6
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實...
    他方l閱讀 1,137評論 0 2
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實...
    Yaoxue9閱讀 1,413評論 0 6
  • 巨大的黑色的瞳孔,張開的嘴里時不時露出黃色的尖牙,它有四個……耳朵?鹿慢慢地往后爬著,那巨大的怪物正慢慢靠近它。 ...
    藍皮皮閱讀 150評論 0 1

友情鏈接更多精彩內(nèi)容