如何优雅的在一台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 相关文章推荐
Prototype最新版(1.5 rc2)使用指南(1)
Jan 10 Javascript
jQuery 解析xml文件
Aug 09 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
Apr 11 Javascript
window.dialogArguments 使用说明
Apr 11 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
Nov 01 Javascript
JavaScript表单通过正则表达式验证电话号码
Mar 14 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
Jul 24 Javascript
javascript实现Java中的Map对象功能的实例详解
Aug 21 Javascript
快速将Vue项目升级到webpack3的方法步骤
Sep 14 Javascript
js捆绑TypeScript声明文件的方法教程
Apr 13 Javascript
vue2单元测试环境搭建
May 24 Javascript
Layui数据表格 前后端json数据接收的方法
Sep 19 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自动加载的两种实现方法
2010/06/21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
PHP基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
python实现折半查找和归并排序算法
2017/04/14 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
Python基于递归实现电话号码映射功能示例
2018/04/13 Python
python虚拟环境完美部署教程
2019/08/06 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
GIVENCHY纪梵希官方旗舰店:高定彩妆与贵族护肤品
2018/04/16 全球购物
介绍java中初始化块的使用
2012/09/11 面试题
入学生会自荐书范文
2014/02/05 职场文书
工程负责人任命书
2014/06/06 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
如何撰写创业策划书
2019/06/27 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers
python数字图像处理实现图像的形变与缩放
2022/06/28 Python