koa2 允许跨域

2020-11-09  本文已影响0人  熊爸天下_56c7

参考文章: https://www.cnblogs.com/fangshidaima/p/10495890.html

一. koa2 允许跨域

安装库 koa2-cors

npm i koa2-cors --save

然后在app.js中:

const cors = require('koa2-cors');

app.use(
  cors({
      origin: function(ctx) { //设置允许来自指定域名请求
          if (ctx.url === '/test') {
              return '*'; // 允许来自所有域名请求
          }
          return 'http://localhost:8080'; //只允许http://localhost:8080这个域名的请求
      },
      maxAge: 5, //指定本次预检请求的有效期,单位为秒。
      credentials: true, //是否允许发送Cookie
      allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], //设置所允许的HTTP请求方法'
      allowHeaders: ['Content-Type', 'Authorization', 'Accept'], //设置服务器支持的所有头信息字段
      exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'] //设置获取其他自定义字段
  })
);

二. 举例---前端vue项目

main.js

import Vue from 'vue'
import App from './App.vue'
import axios from 'axios'

Vue.prototype.$axios = axios    //全局注册,使用方法为:this.$axios
Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

写了一个hello组件用axios发起请求

<template>
  <div>
    <h2>hello</h2>
    <button @click="btntest">OK</button>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {
    btntest() {
      console.log("haha");
      this.$axios({
        method: "get",
        url: "http://localhost:3000",
        data: null,
      })
        .then((response) => {
          console.log(response); //请求成功返回的数据
        })
        .catch(
          (error) => console.log(error) //请求失败返回的数据
        );
    },
  },
};
</script>

在app.vue中引入这个组件

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <Hello></Hello>
  </div>
</template>

<script>

import Hello from "./components/hello"

export default {
  name: 'App',
  components: {
    Hello
  }
}
</script>

三. 举例 后端

安装koa2-cors

npm install koa2-cors

在app.js中:

const Koa = require('koa')
const app = new Koa()
const views = require('koa-views')
const json = require('koa-json')
const onerror = require('koa-onerror')
const bodyparser = require('koa-bodyparser')
const logger = require('koa-logger')

const index = require('./routes/index')
const users = require('./routes/users')
const cors = require('koa2-cors'); //跨域处理


app.use(
  cors({
      origin: function(ctx) { //设置允许来自指定域名请求
          if (ctx.url === '/test') {
              return '*'; // 允许来自所有域名请求
          }
          return 'http://localhost:8080'; //只允许http://localhost:8080这个域名的请求
      },
      maxAge: 5, //指定本次预检请求的有效期,单位为秒。
      credentials: true, //是否允许发送Cookie
      allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], //设置所允许的HTTP请求方法
      allowHeaders: ['Content-Type', 'Authorization', 'Accept'], //设置服务器支持的所有头信息字段
      exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'] //设置获取其他自定义字段
  })
);

// error handler
onerror(app)

// middlewares
app.use(bodyparser({
  enableTypes:['json', 'form', 'text']
}))
app.use(json())
app.use(logger())
app.use(require('koa-static')(__dirname + '/public'))

app.use(views(__dirname + '/views', {
  extension: 'pug'
}))

// logger
app.use(async (ctx, next) => {
  const start = new Date()
  await next()
  const ms = new Date() - start
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})

// routes
app.use(index.routes(), index.allowedMethods())
app.use(users.routes(), users.allowedMethods())

// error-handling
app.on('error', (err, ctx) => {
  console.error('server error', err, ctx)
});

module.exports = app

运行结果:

上一篇下一篇

猜你喜欢

热点阅读