Vue + Node 全栈开发

2017-04-28   14 分钟阅读

开发流程

  1. 前后端分离。前端用 Vue 开发页面,路由通过 axios 实现;后端用 Node 开发 api
  2. 前端开发修改 Vue-cli 提供的 proxyTable 进行代理,跨域调用

具体实现

1.在 Vue 项目的根目录下新建 server 目录,存放服务器相关文件,进入 server 目录,新建三个 js 文件,安装 express。
-index.js(入口文件)
-db.js(数据库操作)
-api.js(api 开发)

// server/index.js
// 引入编写好的api
const api = require('./api')
// 引入文件模块
const fs = require('fs')
// 引入处理路径的模块
const path = require('path')
// 引入处理post数据的模块
const bodyParser = require('body-parser')
// 引入Express
const express = require('express')
const app = express()

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: false}))
app.use(api)
// 访问静态资源文件 这里是访问所有dist目录下的静态资源文件
app.use(express.static(path.resolve(__dirname, '../dist')))
// 因为是单页应用 所有请求都走/dist/index.html
app.get('*', function (req, res) {
  const html = fs.readFileSync(path.resolve(__dirname, '../dist/index.html'), 'utf-8')
  res.send(html)
})

var port = 8081
var uri = 'http://localhost:' + port

// 监听端口
app.listen(port)
console.log('\n> Starting server...')
console.log('> Listening at ' + uri + '\n')
// server/db.js
// MySQL数据库连接配置
module.exports = {
  mysql: {
    host: '127.0.0.1',
    user: 'root',
    password: 'zouyong',
    database: 'my_db',
    port: 3306
  }
}
// server/api.js
var mysql = require('mysql')
var express = require('express')
var router = express.Router()

var db = require('./db')
// var $sql = require('./userSqlMapping');

// util
var extend = function (target, source, flag) {
  for (var key in source) {
    if (source.hasOwnProperty(key)) {
      flag ? (target[key] = source[key]) : (target[key] === void 0 && (target[key] = source[key]))
    }
  }
  return target
}

// 使用连接池,提升性能
var pool = mysql.createPool(extend({}, db.mysql))

// 向前台返回JSON方法的简单封装
var jsonWrite = function (res, ret) {
  if (typeof ret === 'undefined') {
    res.json({
      code: '1',
      msg: '操作失败'
    })
  } else {
    res.json(ret)
  }
}

// 查询所有用户
router.get('/api/queryAll', function (req, res, next) {
  pool.getConnection(function (err, connection) {
    if (err) return err
    connection.query('SELECT * FROM user', function (err, result) {
      if (err) return err
      jsonWrite(res, result)
      connection.release()
    })
  })
})

module.exports = router

2.开启代理服务。因为 Vue 项目开发时,会自动开启一个8080端口的服务器,而后端为8081,造成了跨域。进入project-name/config/index.js 可设置开启代理服务。

...
 proxyTable: {
        '/api': {
        target: 'http://localhost:8081/api/',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }
...

具体配置可参考官方文档

原文

留下评论

科学上网后可评论