2020-12-04

简单记录一下vue+node前后端分离开发的几个坑


前言

本篇主要记录一些vue+node在部署和配置中存在的坑


一、vue.config.js和config文件夹

根据百度得到的结果:vue-cli 3.x 脚手架搭建完成后,项目目录中没有 vue.config.js 文件,需要手动在根目录中创建 vue.config.js。但其实我的2.9.6中已经没有vue.config.js文件了,当然这个不是重点,重点是如何配置。
起因是我想在node里面部署多个项目,类似于如下目录结构:
在这里插入图片描述
网上只介绍了如何配置vue.config.js的publicPath属性,如果没有也只是简单说了句新建该文件,

    //这是vue.config.js文件
    // 这条语句的意思是在打包时给所有的引入添加上/app路径,可以根据自己的需求来命名后面的名字
    publicPath:"/app", // /app 可以修改

然而等你新建了以后发现根本没有卵用。替代方案是修改的config文件夹中的index.js文件,我这里只涉及到了生产环境,所以就只修改了build对象,关注assetsPublicPath属性

  //这是config/index.js
  build: {
    // Template for index.html
    index: path.resolve(__dirname, '../dist/index.html'),

    // Paths
    assetsRoot: path.resolve(__dirname, '../dist'),
    assetsSubDirectory: 'static',
    assetsPublicPath: '/app',
  }

二、vue路由配置和history模式

配置完index文件后,记得配置路由文件:
router/index.js:

//router/index.js
export default new Router({
  mode: "history",
  base: process.env.Base_URL,
  routes: [
    {
      //这里修改与assetsPublicPath一致
      path: '/app',
      name: 'HelloWorld',
      component: HelloWorld
    }
  ]
})
//app.js
var history = require('connect-history-api-fallback')

这里的history模式以及node中app.js文件使用connect-history-api-fallback待商榷,本人测试发现即使不使用history也不会存在404的情况。


三、node配置

//app.js
//记得引入express
app.use('/app', express.static(path.join(__dirname, 'public/app')));
app.use('/cms', express.static(path.join(__dirname, 'public/cms')));

四、前后端交互

1.从vue向node传值

get方法

//router.js
//req参数接收从前端传过来的值,get方法使用req.quey取值
router.get('/addUser',function(req,res){
	let user = req.query
})
//vue
//使用params接收要传递给后端的对象 
      Axios({
        url: url,
        method:"get",
        params: this.obj["user4"], 
      }).then(res=>{
          console.log(res);
      })

post方法

//router.js
//req参数接收从前端传过来的值,post方法使用req.body取值
router.post('/addUser',function(req,res){
	let user = req.body
})
//vue
//使用data接收对象,this.obj["user4"]是要传递的对象 
      Axios({
        url: url,
        method:"post",
        data: this.obj["user4"], 
      }).then(res=>{
          console.log(res);
      })

2.vue获取json数据

//router.js
var jsonPath = path.resolve(".") + '/files/' + 'users.json';
router.get('/getUser', function (req, res) {
    fs.readFile(jsonPath, 'utf8', function (err, data) {
        res.end(data);
    })
})

//vue
let url = "http://localhost:3000/api/getUser";
Axios({
    url: url,
    method:"GET"
}).then(res=>{
    console.log(res)
  })
}

五、部署

1、部署在express服务器中

经过以上步骤后,直接把打包完的dist文件夹改好名字,放在express服务器的public文件夹中即可,通过http://localhost:3000/app和http://localhost:3000/cms的方式访问

2、部署在iis中

如果是通过网站的方式部署在iis中,是访问不到的,如下图
在这里插入图片描述
应该先新建一个网站,然后以应用程序的方式部署,如下图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值