本篇文章基于 vue、node(koa)前端
vue 项目开发过程当中,接口跨域是一个很常见的问题。在开发时候能够用 vue 自带的 proxy 能够轻松解决。生产环境下,前端项目每每是部署在后端项目下,不会存在跨域的问题,接口前缀能够忽略。vue
dev 环境下,请求一个产品列表接口,咱们可能会这么作:node
https://www.baidu.com/api/product/list
生产环境下,前缀能够忽略:git
/api/product/list
问题来了,若是咱们想在本地测试生产环境下的前端项目,会存在跨域的问题;发给后端部署项目又太麻烦,修改代价太大。咱们能够本身部署一个简易的 node 服务,来部署本身的前端项目~github
npm i koa --save-dev npm i koa-static --save-dev npm i koa-mount --save-dev npm i http-proxy-middleware --save-dev npm i koa2-connect --save-dev
引入 koa,而后监听端口npm
const Koa = require('koa'); const Koa = require('koa'); const path = require('path'); const app = new Koa();; const port = process.env.PORT || 3000; app.listen(port, () => { console.log(` Your application is running here: http://localhost:${port}`); });
开放 dist(即打包出来的目录)后端
const koaStatic = require('koa-static'); const koaMount = require('koa-mount'); // 开放目录 app.use(koaMount('/', koaStatic(resolve('../dist'))));
这样差很少就完成了,跑服务而后打开 3000 端口,项目可以正常访问:api
项目是能正常请求了,但是还须要处理接口问题,即 node 当成中间件,转发前端接口请求到真正的后端接口跨域
const { createProxyMiddleware } = require('http-proxy-middleware'); const k2c = require('koa2-connect'); app.use(async (ctx, next) => { const url = ctx.path; if (url.startsWith('/api')) { ctx.respond = false; await k2c( createProxyMiddleware({ target: # 后端的接口地址, changeOrigin: true, secure: false, }), )(ctx, next); } return await next(); });
最后再打开浏览器查看,大功告成,接口转发成功~浏览器
END