内容简介:使用 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...
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Developing Large Web Applications
Kyle Loudon / Yahoo Press / 2010-3-15 / USD 34.99
As web applications grow, so do the challenges. These applications need to live up to demanding performance requirements, and be reliable around the clock every day of the year. And they need to withs......一起来看看 《Developing Large Web Applications》 这本书的介绍吧!