如何优雅的在一台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 相关文章推荐
用于table内容排序
Jul 21 Javascript
javascript 对表格的行和列都能加亮显示
Dec 26 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
Aug 28 Javascript
Javascript Request获取请求参数如何实现
Nov 28 Javascript
JavaScript获取Url里的参数
Dec 18 Javascript
详解Javascript模板引擎mustache.js
Jan 20 Javascript
AngularJS入门教程之AngularJS模型
Apr 18 Javascript
jQuery右下角悬浮广告实例
Oct 17 Javascript
js设置随机切换背景图片的简单实例
Nov 12 Javascript
vue如何安装使用Quill富文本编辑器
Sep 21 Javascript
详解vue 自定义marquee无缝滚动组件
Apr 09 Javascript
react 生命周期实例分析
May 18 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
JSON在PHP中的应用介绍
2012/09/08 PHP
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
原生js轮播特效
2017/05/18 Javascript
让微信小程序支持ES6中Promise特性的方法详解
2017/06/13 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
Python实现统计代码行的方法分析
2017/07/12 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
利用Python实现kNN算法的代码
2019/08/16 Python
python socket 聊天室实例代码详解
2019/11/14 Python
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
办公室文秘自我评价
2013/09/21 职场文书
募捐感谢信
2015/01/22 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
使用golang编写一个并发工作队列
2021/05/08 Golang
Django集成富文本编辑器summernote的实现步骤
2021/05/31 Python
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js
Python测试框架pytest高阶用法全面详解
2022/06/01 Python