如何优雅的在一台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 相关文章推荐
在JS中最常看到切最容易迷惑的语法(转)
Oct 29 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
Apr 17 Javascript
jQuery中each()方法用法实例
Dec 27 Javascript
JavaScript Date对象详解
Mar 01 Javascript
JS 清除字符串数组中,重复元素的实现方法
May 24 Javascript
jQuery实现页面点击后退弹出提示框的方法
Aug 24 Javascript
基于mpvue的小程序项目搭建的步骤
May 22 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
Jul 30 Javascript
webpack4打包vue前端多页面项目
Sep 17 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
Apr 14 Javascript
JS中的继承操作实例总结
Jun 06 Javascript
JS实现炫酷轮播图
Nov 15 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
php 代码优化的42条建议 推荐
2009/09/25 PHP
PHP小教程之实现双向链表
2014/06/12 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
PHP中实现获取IP和地理位置类分享
2015/02/10 PHP
php判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
Javascript与flash交互通信基础教程
2008/08/07 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
js的对象与函数详解
2019/01/21 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
关于JavaScript数组去重的一些理解汇总
2020/09/10 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
在Python中使用mongoengine操作MongoDB教程
2015/04/24 Python
深入学习python的yield和generator
2016/03/10 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
python实现自动打卡的示例代码
2020/10/10 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
美国现代家具和家居商店:Apt2B
2016/08/29 全球购物
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
什么是TCP/IP
2014/07/27 面试题
外国语学院毕业生自荐信
2013/10/28 职场文书
文明教师事迹材料
2014/01/16 职场文书
2014全国两会学习心得体会2000字
2014/03/10 职场文书
公司演讲稿开场白
2014/08/25 职场文书
2014迎接教师节演讲稿
2014/09/10 职场文书
小学安全工作总结2015
2015/05/18 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
安全生产协议书
2016/03/22 职场文书
python字典的元素访问实例详解
2021/07/21 Python
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android