如何优雅的在一台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写的一个TableView控件代码
Jan 23 Javascript
jQuery EasyUI 中文API Button使用实例
Apr 14 Javascript
jquery手风琴特效插件
Feb 04 Javascript
JS通过ajax动态读取xml文件内容的方法
Mar 24 Javascript
浅析Javascript ES6新增值比较函数Object.is
Aug 24 Javascript
使用JS编写的随机抽取号码的小程序
Aug 11 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
Mar 01 Javascript
vue结合Echarts实现点击高亮效果的示例
Mar 17 Javascript
微信小程序自定义prompt组件步骤详解
Jun 12 Javascript
Vue中Axios从远程/后台读取数据
Jan 21 Javascript
在Vue中使用antv的示例代码
Jun 29 Javascript
antd Select下拉菜单动态添加option里的内容操作
Nov 02 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文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
PHP下对数组进行排序的函数
2010/08/08 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
浅谈CSS3中的变形功能-transform功能
2017/12/27 HTML / CSS
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
eDreams德国:南欧领先的在线旅游公司
2020/12/07 全球购物
致100米运动员广播稿
2014/02/14 职场文书
公司会计主管岗位责任制
2014/03/01 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
篮球比赛口号
2014/06/10 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
公司感谢信范文
2015/01/22 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书