如何优雅的在一台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生成缩略图后上传并利用canvas重绘
May 15 Javascript
jQuery实现固定在网页顶部的菜单效果代码
Sep 02 Javascript
JS实现的找零张数最小问题示例
Nov 28 Javascript
JS实现的邮箱提示补全效果示例
Jan 30 Javascript
js闭包学习心得总结
Apr 17 Javascript
详解vue组件基础
May 04 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
Jul 23 Javascript
turn.js异步加载实现翻书效果
Jul 25 Javascript
Angular如何由模板生成DOM树的方法
Dec 23 Javascript
微信小程序scroll-view点击项自动居中效果的实现
Mar 25 Javascript
node.js 如何监视文件变化
Sep 01 Javascript
在webstorm中配置less的方法详解
Sep 25 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 读取Postgresql中的数组
2013/04/14 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
2018/04/27 PHP
PHP7 弃用功能
2021/03/09 PHP
javascript 函数式编程
2007/08/16 Javascript
JS无限树状列表实现代码
2011/01/11 Javascript
ajax中get和post的说明及使用与区别
2012/12/23 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
小程序云开发实战小结
2018/10/25 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
Python中的列表生成式与生成器学习教程
2016/03/13 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
pandas 将索引值相加的方法
2018/11/15 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
django连接oracle时setting 配置方法
2019/08/29 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
洲际酒店集团英国官网:IHG英国
2019/07/10 全球购物
提高EJB性能都有哪些技巧
2012/03/25 面试题
大学团支书的自我评价分享
2013/12/14 职场文书
关于爱情的广播稿
2014/01/16 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
python Django框架快速入门教程(后台管理)
2021/07/21 Python
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server