如何优雅的在一台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 相关文章推荐
IE FF OPERA都可用的弹出层实现代码
Sep 29 Javascript
function foo的原型与prototype属性解惑
Nov 19 Javascript
jQuery拖拽div实现思路
Feb 19 Javascript
jQuery DOM插入节点操作指南
Mar 03 Javascript
AspNet中使用JQuery boxy插件的确认框
May 20 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
Nov 29 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
Dec 12 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
Aug 23 Javascript
react redux入门示例
Apr 19 Javascript
vue中使用input[type="file"]实现文件上传功能
Sep 10 Javascript
Vue源码解析之Template转化为AST的实现方法
Dec 14 Javascript
原生JS与JQ获取元素的区别详解
Feb 13 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
神族 PROTOSS 概述
2020/03/14 星际争霸
一周学会PHP(视频)Http下载
2006/12/12 PHP
一个数据采集类
2007/02/14 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
javascript eval函数深入认识
2009/02/21 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
2015/12/13 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
bootstrap常用组件之头部导航实现代码
2017/04/20 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python-嵌套列表list的全面解析
2016/06/08 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
python+django加载静态网页模板解析
2017/12/12 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
保险公司早会主持词
2014/03/22 职场文书
质量承诺书怎么写
2014/05/24 职场文书
2014年效能监察工作总结
2014/11/21 职场文书
交通事故被告代理词
2015/05/23 职场文书
MySQL实现配置主从复制项目实践
2022/03/31 MySQL