如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目


Posted in Javascript onJanuary 20, 2019

项目: vue + express + mongodb

项目前后分离部署在一台服务器上面

  • express端口:3000
  • mongodb端口:27017
  • vue端口:本地是8080 服务端是:80

本地开发配置

本地开发基于vue cli 端口是 8080如果请求api的时候在前缀加上localhost:3000会提示跨域问题,我们可以使用下面方式来解决这个问题

在vue项目路径找到这个文件 /vue-item/config/index.js 找到这行代码:

proxyTable: {}

添加如下配置

demo:

proxyTable: {
    '/v1/**':{
    target: 'http://localhost:3000/',
    pathRewrite: {
     '^/v1': '/'
    }
   }
  }

v1 是我给api自动添加的前缀

这个前缀可以使用 axios 配置添加

在main.js 主入口文件添加

如下

import apiConfig from '../config/api.config'
// import axios
import Axios from 'axios'
import VueAxios from 'vue-axios'
Vue.use(VueAxios, Axios)
// Axios.defaults.baseURL = apiConfig.baseUrl;
Axios.defaults.baseURL = 'v1/' 这样也ok的

api.config

判断是开发模式还是本地模式,其实不需要这么麻烦 直接

const isProdMode = Object.is(process.env.NODE_ENV, 'production')

module.exports = {
 baseUrl: isProdMode ? 'api.shudong.wang/v1/' : 'v1/'
}

如果把axios 配置了自动前缀

每次访问的时候

data(){
  return {
   articleList:Object
  }
 },
 mounted: function(){
  this.getArticleList()
 },
 methods:{
  getArticleList(){
   console.log(111111111)
     this.$http.get("/article/list") // this.$http axios使用的一种方式
     .then((response)=>{
       console.log(response.data)
       let res = response.data;
       this.articleList = res.data;

     })
     .catch((error) =>{
      console.log(error)
     })
  }
 },

上面请求的例子中相当于访问: localhost:8080/v1/article/list

这样就可以解决跨域问题

其实最终访问的是 localhost:3000/article/list express的api

这个v1只是api版本的标识,如果想带着,并且api是可以v1版本方式访问的,把代理的路径重新规则去掉就可以

操作如下:

proxyTable: {
    '/v1/**':{
    target: 'http://localhost:3000/',
    //pathRewrite: { //这个规则去掉
    // '^/v1': '/'
    //}
   },
   '/goods/*':{
    target:'http://localhost:3000'
   },
   '/users/**':{
    target:'http://localhost:3000'
   }
  }

服务端部署

本地可以使用proxyTable 解决跨域问题,那么服务端怎么解决跨域问题呢?

answer:使用nginx反向代理

nginx配置: 仔细分析一下看看是否适合自己的业务场景

server
  {
    listen 80;
    #listen [::]:80;
    server_name zhenfan.shudong.wang ; # 你的域名不需要加http 
    index index.html index.htm index.php default.html default.htm default.php;
    root /home/wwwroot/zhenfan/dist;

    include none.conf;
    #error_page  404  /404.html;

    # Deny access to PHP files in specific directory
    #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

    include enable-php.conf;

    location /v1 {
      proxy_pass http://127.0.0.1:3000/; # 当访问v1的时候默认转发到 3000端口
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
      expires   30d;
    }

    location ~ .*\.(js|css)?$
    {
      expires   12h;
    }

    location ~ /.well-known {
      allow all;
    }

    location ~ /\.
    {
      deny all;
    }

    access_log off;
  }

关于express链接mongodb可以直接填写端口号,不存在跨域问题,直接 127.0.0.1:27017就ok,

怎么在服务器上面搭建可以参考上篇 mongodb篇

关于有什么问题,可以在下面留言,希望你是来讨论技术的。

上次写完一篇,一个小朋友,来到这里咬文嚼字,针对 部署这个词,说用的不当,还口口声声说是来讨论技术,把注意力放在这个上面上真没意义。

希望本篇文章能帮到你,解决你的问题。 也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
利用XMLHTTP传递参数在另一页面执行并刷新本页
Oct 26 Javascript
Jquery cookie操作代码
Mar 14 Javascript
修复ie8&chrome下window的resize事件多次执行
Oct 20 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
Nov 28 Javascript
Javascript中的数组常用方法解析
Jun 17 Javascript
下一代Bootstrap的5个特点 超酷炫!
Jun 17 Javascript
AngularJS基础 ng-if 指令用法
Aug 01 Javascript
javascript 面向对象function详解及实例代码
Feb 28 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
Mar 09 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
Jul 17 jQuery
Bootstrap Table列宽拖动的方法
Aug 15 Javascript
手把手教你写一个微信小程序(推荐)
Oct 17 Javascript
js序列化和反序列化的使用讲解
Jan 19 #Javascript
vue-router传参用法详解
Jan 19 #Javascript
vue-router实现嵌套路由的讲解
Jan 19 #Javascript
vue-router实现编程式导航的代码实例
Jan 19 #Javascript
vue数据操作之点击事件实现num加减功能示例
Jan 19 #Javascript
vue-router命名路由和编程式路由传参讲解
Jan 19 #Javascript
Vue实现的父组件向子组件传值功能示例
Jan 19 #Javascript
You might like
html中select语句读取mysql表中内容
2006/10/09 PHP
PHP 的 __FILE__ 常量
2007/01/15 PHP
解析isset与is_null的区别
2013/08/09 PHP
php实现读取超大文件的方法
2014/07/28 PHP
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
js使用eval解析json(js中使用json)
2014/01/17 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
python适合人工智能的理由和优势
2019/06/28 Python
如何获取Python简单for循环索引
2019/11/21 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
CSS3中的@keyframes关键帧动画的选择器绑定
2016/06/13 HTML / CSS
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
教师岗位聘任书范文
2014/03/29 职场文书
中职招生先进个人材料
2014/08/31 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
中学图书馆工作总结
2015/08/11 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
四年级数学教学反思
2016/02/16 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android
移除Selenium中window.navigator.webdriver值
2022/06/10 Python