如何优雅的在一台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 concat数组累加 示例
Sep 03 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
Dec 10 Javascript
javascript简单实现图片预加载
Dec 03 Javascript
使用jQuery实现星级评分代码分享
Dec 09 Javascript
jquery使用ul模拟select实现表单美化的方法
Aug 18 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
Sep 14 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
Sep 19 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
Dec 21 Javascript
Bootstrap表单制作代码
Mar 17 Javascript
详解用webpack2搭建angular2的项目
Jun 22 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
Sep 20 Javascript
node.js将MongoDB数据同步到MySQL的步骤
Dec 10 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 和 MySQL 开发的 8 个技巧
2006/10/09 PHP
收集的PHP中与数组相关的函数
2007/03/22 PHP
PHP 高级课程笔记 面向对象
2009/06/21 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
JQuery中html()方法使用不当带来的陷阱
2011/04/07 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
js获取页面description的方法
2015/05/21 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
jQuery动态加载css文件实现方法
2016/06/15 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
2017/01/03 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
学习Vue组件实例
2018/04/28 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
用python写扫雷游戏实例代码分享
2018/05/27 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
工作自荐信
2013/12/11 职场文书
个人简历自我评价范文
2014/02/04 职场文书
2015年端午节活动总结
2015/02/11 职场文书
物业保洁员岗位职责
2015/02/13 职场文书
初中英语教学随笔
2015/08/15 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
html中两种获取标签内的值的方法
2022/06/16 jQuery