内容简介:使用 vue-cli 脚手架工具创建一个基于 webpack 的 Vue 项目本身已经包含了 Express, 但是项目若需要结合 MySQL 或者 MongoDB, 还需折腾一番前提: 安装在你的
使用 vue-cli 脚手架 工具 创建一个基于 webpack 的 Vue 项目本身已经包含了 Express, 但是项目若需要结合 MySQL 或者 MongoDB, 还需折腾一番
构建 Vue 项目
前提: 安装 node.js 环境
安装 vue-cli
npm install -g vue-cli
一个基于 webpack 的 Vue 项目
vue init webpack [project-name] cd [project-name] npm install
使用 vue-resource 请求数据
npm install --save vue-resource
在你的 src/main.js
适当位置添加以下代码
import VueResource from "vue-resource" Vue.use(VueResource)
MySQL
添加 Express 服务端目录
前提: 安装 MySQL 数据库
在项目根文件夹下创建一个 server 文件夹。 然后里面创建下面几个文件夹及文件
|-- server
|-- bin
|-- www.js => Express 服务器入口文件
|-- config
|-- db.js => MySQL 数据库配置文件
|-- map
|-- sqlMap.js => SQL 语句存储文件
|-- router
|-- userApi.js => 数据库操作文件
bin/www.js
const express = require("express")
const path = require("path")
const bodyParser = require("body-parser")
const cookieParser = require("cookie-parser")
const logger = require("morgan")
const compression = require("compression")
const app = express()
const userApi = require("../router/userApi")
app.use(logger("dev"))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
extended: false
}))
app.use(cookieParser())
app.use(compression({
threshold: 0
}))
// 后端api路由
app.use("/api/user", userApi)
// 监听端口
app.use((req, res, next) => {
var err = new Error("This page not found")
err.status = 404
next(err)
})
app.listen(3000, () => {
console.log("Server running in port 3000...")
})
config/db.js
// 数据库连接配置
module.exports = {
mysql: {
host: "127.0.0.1",
user: "root",
password: "root",
database: "test",
port: "3306"
}
}
map/sqlMap.js
// sql语句
const sqlMap = {
// 用户
user: {
add: "insert into users( `id` , `user_id` , `user_pwd` ) values (NULL, ?, ?)"
}
}
module.exports = sqlMap
router/userApi.js
const models = require("../config/db")
const express = require("express")
const router = express.Router()
const mysql = require("mysql")
const $sql = require("../map/sqlMap")
// 连接数据库
const conn = mysql.createConnection(models.mysql)
conn.connect()
const jsonWrite = (res, ret) => {
if (typeof ret === "undefined") {
res.json({
code: "1",
msg: "操作失败"
})
} else {
res.json(ret)
}
}
// 增加用户接口
router.post("/addUser", (req, res) => {
var sql = $sql.user.add
var params = req.body
console.log(params)
conn.query(sql, [params.user_id, params.user_pwd], (err, result) => {
if (err) {
console.log(err)
}
if (result) {
jsonWrite(res, result)
}
})
})
module.exports = router
添加 scripts 到 package.json
"scripts": {
"server": "nodemon ./server/bin/www.js",
}
注意到 package.json 中的 nodemon, 这是热加载插件, 就是有新文件的创建或者有新增代码, 将会重新启动 Express 服务
安装依赖
npm install --save nodemon mysql body-parser
MongoDB
示例: https://github.com/vxhly/vue-express-mongodb
添加 Express 服务端目录
前提: 安装 MongoDB 数据库
在项目根文件夹下创建一个 server 文件夹。 然后里面创建下面几个文件夹及文件
|-- server
|-- bin
|-- www.js => Express 服务器入口文件
|-- config
|-- db.js => MongoDB 数据库配置文件
|-- router
|-- userApi.js => 数据库操作文件
bin/www.js
const express = require("express")
const path = require("path")
const bodyParser = require("body-parser")
const cookieParser = require("cookie-parser")
const logger = require("morgan")
const compression = require("compression")
const app = express()
const userApi = require("../router/userApi")
app.use(logger("dev"))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
extended: false
}))
app.use(cookieParser())
app.use(compression({
threshold: 0
}))
// 后端api路由
app.use("/api/user", userApi)
// 监听端口
app.use((req, res, next) => {
var err = new Error("This page not found")
err.status = 404
next(err)
})
app.listen(3000, () => {
console.log("Server running in port 3000...")
})
config/db.js
const mongoose = require("mongoose")
mongoose.connect("mongodb://127.0.0.1/test")
const db = mongoose.connection
mongoose.Promise = global.Promise
db.on("error", console.error.bind(console, "Connect error"))
db.once("open", function() {
console.log("Mongodb started successfully")
})
const userSchema = mongoose.Schema({
userId: {
type: Number,
required: true
},
userPwd: {
type: String,
required: true
}
})
const Models = {
User: mongoose.model("User", userSchema)
}
module.exports = Models
router/userApi.js
const express = require("express")
const router = express.Router()
const model = require("../config/db.js")
const jsonWrite = (res, ret) => {
if (typeof ret === "undefined") {
res.json({
code: "404",
msg: "server is error"
})
} else {
res.json(ret)
}
}
router.post("/useradd", (req, res, next) => {
const params = req.body
const id = params.userId
const pwd = params.userPwd
const user = new model.User({
userId: id,
userPwd: pwd
})
model.User.findOne({
userId: user.userId
},
(err, doc) => {
if (err) console.log(err)
console.log(doc)
if (doc) {
jsonWrite(res, doc)
} else {
user.save(err => {
if (err) {
console.log(err)
} else {
jsonWrite(res, doc)
}
})
}
})
})
module.exports = router
编写 vue 测试文件
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<form>
<input type="text" name="user_id" v-model="user_id" placeholder="Enter your ID"> <br>
<input type="password" name="user_pwd" v-model="user_id" placeholder="Enter your password"> <br>
<a href="javascript:" @click="addUser">提交</a>
</form>
</div>
</template>
<script>
export default {
name: 'hello',
data () {
return {
msg: 'Welcome to Your Vue.js App',
user_id: '',
user_pwd: ''
}
},
methods: {
addUser() {
var userId = this.user_id
var userPwd = this.user_pwd
this.$http.post('/api/user/addUser', {
user_id: userId,
user_pwd: userPwd
}).then((response) => {
console.log(response)
})
}
}
}
</script>
设置代理与跨域
完成上面步骤之后, 执行 npm run dev
, 你会发现会报一个错误: vue-resource.common.js?e289:1071 POST http://localhost:8080/api/use... 404 (Not Found)
。 这是由于直接访问 8080 端口, 是访问不到的, 所以这里需要设置一下代理转发映射.
项目根目录下的 config 文件夹中有一个 proxyTable 参数, 用来设置地址映射表, 可以添加到开发时配置(dev)中
config/index.js
dev: {
// ...
proxyTable: {
'/api': {
target: 'http://127.0.0.1:3000/api/',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
},
// ...
}
添加以上代码之后, 请求 /api
时就代表 http://127.0.0.1:3000/api/
(这里要写 ip, 不要写 localhost), changeOrigin 参数接收一个布尔值, 如果为 true, 这样就不会有跨域问题了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 结合Oauth的XSS利用技术
- One_gadget和UAF结合利用堆溢出漏洞研究
- 利用策略模式结合alibaba/alpha框架优化你的图片上传功能
- 结合 CVE-2019-1040 漏洞的两种域提权利用深度分析
- 手把手带你利用SQLmap结合OOB技术实现音速盲注
- Spring boot入门(三):集成AdminLTE(Freemarker),结合generate代码生成器,利用DataTable和Pag...
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。