如何优雅的在一台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 相关文章推荐
jquery控制listbox中项的移动并排序
Nov 12 Javascript
window.opener用法和用途实例介绍
Aug 19 Javascript
JS 页面计时器示例代码
Oct 28 Javascript
使用js dom和jquery分别实现简单增删改
Sep 11 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
Oct 23 Javascript
超实用的JavaScript表单代码段
Feb 26 Javascript
JS数组排序方法实例分析
Dec 16 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
Jan 01 Javascript
JS生成一维码(条形码)功能示例
Jan 19 Javascript
原生node.js案例--前后台交互
Feb 20 Javascript
async/await地狱该如何避免详解
May 10 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
Apr 11 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
追求程序速度,而不是编程的速度
2008/04/23 PHP
PHP 文件类型判断代码
2009/03/13 PHP
php中取得文件的后缀名?
2012/02/20 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
Python Trie树实现字典排序
2014/03/28 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
python strip() 函数和 split() 函数的详解及实例
2017/02/03 Python
Python自动发邮件脚本
2017/03/31 Python
python批量替换页眉页脚实例代码
2018/01/22 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
python的Jenkins接口调用方式
2020/05/12 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
房产代理公证处委托书
2014/04/04 职场文书
C++程序员求职信范文
2014/04/14 职场文书
赔偿协议书范本
2014/04/15 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
2022/04/29 Servers