众所周知,我们在做前后端分离项目的时候,经常需要在本地起前端工程,接口希望拉取服务端的实际数据而不是本地的mock数据,而如果本地程序直接访问远程接口, 肯定会遇到跨域问题。
什么是跨域?实现跨域的多种方式?
这里我就不详细介绍了,大家自行百度哈
为什么要实现前端跨域
一般来讲,前后端分离的项目在大公司都会由后台设置允许跨域访问,因为后台设置允许跨域是很简单和方便的,但是某些情况下,一些小公司或者你工作的场所后台不怎么配合的情况下,这就需要前端来配置跨域请求来方便我们使用接口
vue项目中的配置
以vue-cli搭建的项目为例, 在webpack配置文件 /config/index.js, 由于我们是在 开发环境 下使用,自然而然是要配置在dev里面,找到 proxyTable属性,配置如下:
dev: { // Paths assetsSubDirectory: 'static', assetsPublicPath: '/', <!-- 使用proxyTable进行跨域设置 --> proxyTable: { '/api': { target: 'http://www.abc.com', // 设置你调用的接口域名和端口号, 别忘了加http changeOrigin: true, // 是否跨域 pathRewrite: { // 这里理解成用'/api'代替target里面的地址,后面组件中我们掉接口时直接用api代替 // 比如我要调用'http://www.abc.com/user/add',直接写'/api/user/add'即可' '^/api': '/' } } }, // Various Dev Server settings host: '0.0.0.0', // can be overwritten by process.env.HOST port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined autoOpenBrowser: false, errorOverlay: true, notifyOnErrors: true, poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- /** * Source Maps */ // https://webpack.js.org/configuration/devtool/#development devtool: 'cheap-module-eval-source-map', // If you have problems debugging vue-files in devtools, // set this to false - it *may* help // https://vue-loader.vuejs.org/en/options.html#cachebusting cacheBusting: true, cssSourceMap: true },
上面proxyTable属性中的配置,效果就是将本地8080端口的一个请求代理到了http://www.abc.com这个域名下
'http://localhost:8080/api' ===> 'http://www.abc.com/'
注意: 以上设置只能在开发环境下使用,打包后会出现路径问题的 注意: Vue-cli提供的代理功能,只是让你在开发环境下使用的,它(http-server-middleware)依赖于node环境,生产代码应该使用npm run build然后把dist放到nginx服务器上,在nginx上配置代理地址 Vue项目部署到nginx上的跨域设置
这还没完,现在我们要将项目部署到nginx上,此时原来可以访问的接口又访问不到了,所以这个时候还要对nginx进行设置。
windows系统下载nginx 下载地址: nginx.org/en/docs/win…
选择download进去选择下载版本页面
这里选择稳定版
下载即可
下载完成后目录如下
进入cong文件,打开nginx.congf文件,找到server对象里面的listen属性查看查看监听的端口号(默认80端口)
在nginx根目下启动nginx.exe,如果出现一个黑窗口一闪而过,说明启动成功,访问localhost:80出现此页面则访问成功
如果访问不成功有可能是端口被占用,修改上面的端口号,重启nginx即可, 浏览器访问localhost:XXXX Vue项目部署在nginx上的配置 vue项目运行 npm run build 进行项目打包记得有本地静态资源文件的需要需要webpack配置, 如下:
config文件下的index.js文件找到build属性 assetsPublicPath: '/' =>>>>> assetsPublicPath: './'
build文件下的untils文件中找到vue-style-loader 增加 publicPath: '../../'
此时打包后的dist文件可以不放置服务器环境下访问, 直接打开dist文件目录下的index.html就可以打开访问
这时候的静态资源都可以被加载出来,且不会报错,但是api访问的话还是会报错
将打包后的dist文件里面的内容复制一份到nginx文件中的html文件中
打开html文件清空里面的内容,将复制的内容粘贴进去
进入cong文件,
打开nginx.congf文件,找到server属性在里面新增一条配置
location /api {proxy_pass http://localhost:4000/;}
你要访问那个地址这里就修改为你要访问的那个地址复制代码
以上配置就全部完成啦
注意: 修改完nginx中的配置一定要重启nginx才可以, 切记!!!
nginx简单的操作命令
nginx.exe -s stop // stop是快速停止nginx,可能并不保存相关信息 nginx.exe -s quit // quit是完整有序的停止nginx,并保存相关信息 nginx.exe -s reload // 当配置信息修改,需要重新载入这些配置时使用此命令 nginx.exe -s reopen // 重新打开日志文件 nginx -v // 查看Nginx版本
以上就是我在项目中使用的配置啦,还有一些更高级的配置还没有接触使用到,供大家参考
总结
以上所述是小编给大家介绍的Vue中跨域及打包部署到nginx跨域设置方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
无论是ajax get请求,还是link方式: 都发现报跨域,这是什么问题? 这台服务器换过IP,换IP后,导致服务器上某些程序异常,大部分都卸载重装了,nginx也重装了,以前也没遇到这种问题。 不知道是nginx缺少什么配置,还是换IP导致的服务器环境有问题了? 有没有大神知道如何解决?
本文向大家介绍vue跨域解决方法,包括了vue跨域解决方法的使用技巧和注意事项,需要的朋友参考一下 vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报“No 'Access-Control-Allow-Origin' header is present on the requested resource.” 这种跨域错误。 要想本地正常的调试,解
文档:https://www.npmjs.com/package/egg-cors 安装:npm i egg-cors --save 配置插件 // {app_root}/config/plugin.js exports.cors = { enable: true, package: 'egg-cors', }; config/config.default.js 目录下配置 config.
从FastAdmin1.2.0版本开始已经支持跨域配置,如果我们开发的插件有跨域需要,可以快速使用FastAdmin中的跨域配置。 首先直接在我们的基类控制器代码中添加一行check_cors_request();即可实现跨域的检测和响应。例如: /** * 初始化操作 * @access protected */ protected function _initialize() {
问题内容: 我必须从域B.com调用域A.com(使用http设置cookie)。我在B.com域上所做的就是(javascript): 这将在我测试过的所有浏览器(Safari除外)上在A.com上设置Cookie。令人惊讶的是,即使没有P3P标头,它也可以在IE6中使用。 有什么办法可以使它在Safari中工作吗? 问题答案: 来自: Safari附带了一种保守的cookie策略,该策略将co
本文向大家介绍vue下跨域设置的相关介绍,包括了vue下跨域设置的相关介绍的使用技巧和注意事项,需要的朋友参考一下 本文介绍了vue下跨域设置的相关介绍,分享给大家,具体如下: 1、在使用vue开发的时候经常要涉及到跨域的问题,其实在vue cli中是有我们设置跨域请求的文件的。 2、当跨域无法请求的时候我们可以修改工程下config文件夹下的index.js中的dev:{}部分。 将target