如何优雅的在一台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 相关文章推荐
JavaScript的parseInt 进制问题
May 07 Javascript
JavaScript中变量提升 Hoisting
Jul 03 Javascript
js用Date对象处理时间实现思路及代码
Jan 31 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
Jul 15 Javascript
javascript学习笔记之10个原生技巧
May 21 Javascript
jQuery+easyui中的combobox实现下拉框特效
Feb 27 Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
Mar 08 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
Sep 28 Javascript
JavaScript实现修改伪类样式
Nov 27 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
May 14 Javascript
JS绘图Flot应用图形绘制异常解决方案
Oct 16 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.MVC的模板标签系统(一)
2006/09/05 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
web打印小结
2017/01/11 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
python 性能提升的几种方法
2016/07/15 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
python将pandas datarame保存为txt文件的实例
2019/02/12 Python
python 命令行传入参数实现解析
2019/08/30 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
2020/07/06 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
python中pdb模块实例用法
2021/01/15 Python
小区门卫工作职责
2013/12/14 职场文书
《诺贝尔》教学反思
2014/02/17 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
工地材料员岗位职责
2015/04/11 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
高三化学教学反思
2016/02/22 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers