通过VUE项目的proxyTable配置实现本地跨域

1. 首先我们找一个用来实验的请求地址

(如果下面这个地址访问不了,那就是距离这篇文章发表的时间过得太久导致连接已经失效。你可以随便到某个网站找一条get请求的地址):

https://shared-https.ydstatic.com/gouwuex/ext/script/load_url_s.txt

这是一个get请求,可以通过浏览器的地址栏直接访问,返回的结果是

{"src":"https://shared-https.ydstatic.com/gouwuex/ext/script/extension_3_1.js?v=1513057776750" }

2. 错误场景复现

我们通过npm run dev命令本地启动开发环境
代码中ajax的url如下:

 this.$ajax({
        url: 'https://shared-https.ydstatic.com/gouwuex/ext/script/load_url_s.txt' // 完整的路径
      }).then(res => {
...

看到浏览器器的控制台会出现报错信息

Failed to load https://shared-https.ydstatic.com/gouwuex/ext/script/load_url_s.txt: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.

大概意思就是不允许跨域请求

3. 解决方案:使用VUE项目的proxyTable配置实现本地跨域

在项目的根目录中找到config文件夹,打开里面的index.js文件
这里面分别针对dev和build进行了不同的配置
我们在dev下面修改proxyTable这个字段如下

proxyTable: {
    '/gouwuex': { // 要代理的路径前缀
        target: 'https://shared-https.ydstatic.com', //要代理的域名
        changeOrigin: true,
                },
             },

然后把ajax的请求代码改成下面这样

 this.$ajax({
        url: '/gouwuex/ext/script/load_url_s.txt'  // 这里填写路径要和上面的代理前缀保持一致
      }).then(res => {

重新启动npm run dev命令,大功告成,如果还要深入了解,请看第4部分。

4. 进阶配置:理解前缀和路径重写

如果你在网上搜索到其他文章介绍proxyTable配置的话,可能会提到一个pathRewrite字段,例如下面的代码:

proxyTable: {
      '/api': {
        target: 'http://xxxxxx.com', // 接口的域名
        secure: false,  // 如果是https接口,需要配置这个参数
        changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
        pathRewrite: {
          '^/api': ''
        }
      }
    },

secure字段的作用是是否启用安全访问限制,默认是true。如果你请求的服务器是https,同时证书是无效的状态下,就要把这个安全限制关掉,不然就会报500错误
pathRewrite字段从字面上理解就是路径重写,那么如果使用呢?
接上我之前的例子把配置修改为下面这样:

 proxyTable: {
      '/api': { // 这里不是gouwuex,也就是说,我现在要代理的是api开头的路径了
        target: 'https://shared-https.ydstatic.com',
        changeOrigin: true,
        secure: false //使用https的情况下,如果是无效证书的服务器,需要把安全限制设置为false,不然会报500
        pathRewrite: {
          '^/api': '/gouwuex/'  // 这个地方就是把api重写为gouwuex,这样我们再请求地址前缀写api的时候,实际上请求就就是gouwuex了。
        }
      },
    },

ajax的代码改成这样:

 this.$ajax({
        url: '/api/ext/script/load_url_s.txt' //前缀和代理设置的前缀保持一致
      }).then(res => {

看看现在是不是也可以正确请求了?这个配置的作用就是可以实现我们自定义任何的路径前缀来映射的到指定的接口地址。
如果还有哪个地方不理解的就在评论中给我留言吧。

Mac下使用Sequel Pro连接MySql失败

Mac下使用MySql的dmg安装包安装后,使用Sequel Pro连接会报一个错误,如下:

Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/lib/plugin/caching_sha2_password.so, 2): image not found

原因:

就是在链接数据库时不能加载‘caching_sha2_password’这个插件,也就是不能对身份验证。

解决方案:

  1. 打开系统偏好设置,找到mysql,点击Initialize Database。
  2. 输入你的新密码,记住这个密码,用于后期链接数据库的登陆使用。
  3. 选择‘Use legacy password‘。
  4. 重启mysql服务。

xcode 9 免证书真机调试

iso应用在xcode 7之前,真机调试需要花99美元申请开发者账号。现在最新的xcode9可以无证书调试了。很简单,只需要三步。

一. 创建证书

  1. 运行Xcode, Xcode–》Preference–》添加账号(就是你的appstore账号)
  2. 登录成功之后,选择右下角的Manage Certificates
  3. 在弹出的对话框里面点击左下角的+号,然后选择IOS Development 。然后点击done完成。

二.  配置工程

  1. 点击工程根目录,在工程的General面板中找到Singing部分,在Team选项中选择刚才添加的账号。
  2. 执行build.

三. 信任开发者

  1. 手机中点击设置(Settings) —> 通用(General)—>设备管理—>点击对应的账号 —->信任(Trust)

Linux运行守护进程和查杀进程

如果用ssh方式登录远程服务器运行一个服务(比如python的web服务),当你关掉命令窗口的时候,那个服务也跟停止了。

解决办法:

使用nohup命令运行守护进程,然后下次登录的时候可以查看已经运行的进程和杀掉你想停止的进程。红色文字是可替换部分。

运行守护进程
nohup python3 -m http.server

查看相关进程
ps -ef | grep python

杀指定进程
kill -s 9 11464

远程传输文件到Liunx服务器指定目录

使用scp命令就可以了,不需要安装配置ftp什么的那么麻烦

例如在A服务器上将/root/liuxiaofan目录下所有的文件传输到B的/home/liuxiaofan/code目录下,
命令为:

scp -r /root/liuxiaofan root@43.224.34.73:/home/liuxiaofan/code

也可以先进入到你要上传的目录然后

cd /xxx/xxx/xxx/abc
cd ..
scp -r abc root@43.224.34.73:/home/liuxiaofan/code

解决Mac系统VMware Fusion虚拟机访问web服务不能的办法

问题描述:

Mac系统下使用VMware Fusion虚拟机软件安装了centOS后,网络使用的是Nat模式。centOS系统联网正常,mac可以通过ssh与centOS连接,但是centOS启动了web服务后只能在虚拟机内部访问,mac系统下不能通过浏览器直接访问。

问题原因:

centOS默认的防火墙策略是不允许外部直接访问web服务的

解决方案:

第一步 设置默认允许规则

iptables -F
iptables -P INPUT ACCEPT

第二步 设置linux防火墙
在 /etc/sysconfig/iptables 添加

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8000 -j ACCEPT

这样两条规则就添加了80和8000端口的访问权限了

Centos7下安装Python3

centos7自带了Python2,而且不可以删除,因为系统需要用到。
输入

which python

可以查看安装位置,一般位于/usr/bin/python目录

安装之前先取得root权限(键入命令后输入root账号的密码)

su root

下面开始正式安装Python3

第一步

安装依赖包(可能会报xxx不存在之类的错误,不用管它)

yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

第二步

下载Python安装包

wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz

第三步

创建一个用来安装Python3的目录

mkdir /usr/local/python3 

第四步

解压安装包和安装

tar -xvJf  Python-3.6.2.tar.xz
cd Python-3.6.2
./configure --prefix=/usr/local/python3
make && make install

第五步

创建软连接(类似快捷方式)

ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

最后

在命令行中输入python3测试是否安装成功

xxx:~ liuxiaofan$ python3
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.