如何优雅的在一台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 定义function的三种方式小结
Oct 16 Javascript
js改变img标签的src属性在IE下没反应的解决方法
Jul 23 Javascript
jquery制作搜狐快站页面效果示例分享
Feb 21 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
Sep 06 Javascript
JS实现一个列表中包含上移下移删除等功能
Sep 24 Javascript
JavaScript中关于iframe滚动条的去除和保留
Nov 17 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
Jun 07 Javascript
vue购物车插件编写代码
Nov 27 Javascript
将jquery.qqFace.js表情转换成微信的字符码
Dec 01 jQuery
JavaScript的Object.defineProperty详解
Jul 09 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
Sep 27 Javascript
vue使用element-ui实现表单验证
Dec 13 Vue.js
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同时支持GIF、png、JPEG
2006/10/09 PHP
PHP中cookies使用指南
2007/03/16 PHP
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
php 三元运算符实例详细介绍
2016/12/15 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
prototype1.4中文手册
2006/09/22 Javascript
非常漂亮的JS代码经典广告
2007/10/21 Javascript
起点页面传值js,有空研究学习下
2010/01/25 Javascript
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
将光标定位于输入框最右侧实现代码
2012/12/04 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
详解javascript遍历方式
2015/11/11 Javascript
详谈javascript异步编程
2016/02/21 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
2018/01/13 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
讲解Python中的递归函数
2015/04/27 Python
浅谈DataFrame和SparkSql取值误区
2018/06/09 Python
python通过微信发送邮件实现电脑关机
2018/06/20 Python
ET Mall东森购物网:东森严选
2017/03/06 全球购物
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
项目施工员岗位职责
2014/03/09 职场文书
自我推荐信格式模板
2015/03/24 职场文书
教学质量月活动总结
2015/05/11 职场文书
家长反馈意见及建议
2015/06/03 职场文书
六一活动主持词
2015/06/30 职场文书