当前位置:   article > 正文

使用Express部署Vue项目连接mysql,进行增删改查_vue mysql

vue mysql

一、创建VUE项目


搭建vue-cli框架

npm install -g @vue/cli

在该目录下创建一个文件夹

vue create testproject//vue create <文件夹名称>

根据需要进行选择,我一般选择第一个直接enter(回车)

 完成之后会有提示

然后根据提示执行语句
第一步:进入项目

cd <project-name>

第二步:下载依赖

npm install

第三步:启动项目

npm run serve

出现如下界面就可以了

下载 express 模块(搭建一个简单服务器)

npm i express

下载 MySQL 模块

npm i mysql

下载 axios 模块

npm i --save axios

如果有需要的话,安装element ui
注意:vue3用element ui plus

npm install element-plus --save

在main.js中引入具体可以参考官方文档https://element-plus.gitee.io/zh-CN/

二、创建数据库

简要略过
表名:te_user

 三、创建一个简单的服务器并写入sql语句


在项目根目录创建 server 文件夹然后里面创建三个 .js 文件和一个 api 文件夹

 在 db.js 中配置MySQL

  1. // 连接数据库配置
  2. module.exports = {
  3.     mysql: {
  4.     host: 'localhost', // 域名,这是本机域名
  5.     user: 'root', // MySQL 登录用户名
  6.     password: '023120', // MySQL 登录密码 一般都是 root
  7.     database: 'test', // 要连接的数据库名
  8.     port: '3306', // 数据库端口号
  9.     },
  10.    };

在 index.js 中创建一个服务器

  1. // 使用 express 创建服务器
  2.  // 导入 express 模块
  3.  const express = require('express');
  4.  // 调用 express 函数,返回一个数据库实例
  5.  const app = express();
  6.  // 导入路由模块
  7.  const userApi = require('./api/userApi');
  8.  // 端口号
  9.  const port = 8888;
  10.  // 注册全局解析中间件
  11.  app.use(express.json());
  12.  app.use(express.urlencoded({ extended: false }));
  13.  // 注册路由模块
  14.  app.use('/api/user', userApi);
  15.  // 调用 app.listen() 启动服务器
  16.  app.listen(port, () => console.log(`Example app listening on port 8888!`));
  17. slqMap.js 写入 sql 语句
  18. // todo sql 语句留后面调用
  19. module.exports = {
  20.     user: {
  21.         // ? 占位符 后面给数据自动填充
  22.         add: 'insert into te_user(id,name, age) values(?,?, ?)',
  23.         get: "select * from te_user where name =?",
  24.     },
  25. };

slqMap.js 写入 sql 语句

  1. // todo sql 语句留后面调用
  2. module.exports = {
  3. user: {
  4. // ? 占位符 后面给数据自动填充
  5. add: 'insert into te_user(id,name, age) values(?,?, ?)',
  6. get: "select * from te_user where name =?",
  7. },
  8. };

api/userApi.js 测试用 api 实例

  1. // 测试用 api 实例
  2. var models = require('../db');
  3. var express = require('express');
  4. var router = express.Router();
  5. var mysql = require('mysql');
  6. var $sql = require('../sqlMap');
  7. // 连接数据库
  8. var conn = mysql.createConnection(models.mysql);
  9. conn.connect();
  10. var jsonWrite = (res, ret) => {
  11.     if (typeof ret === 'undefined') {
  12.         res.json({
  13.             code: '1',
  14.             msg: '操作失败',
  15.         });
  16.     } else {
  17.         res.json(ret);
  18.     }
  19. };
  20. // 增加用户接口
  21. // POST 请求
  22. router.post('/addUser', (req, res) => {
  23.     var sql = $sql.user.add;
  24.     var params = req.body;
  25.     console.log(params);
  26.     // ! [params.username, params.age] 自动填充到之前 ? 里面
  27.     conn.query(sql, [params.id,params.name, params.age], (err, result) => {
  28.         if (err) return console.log(err);
  29.         if (result) {
  30.             jsonWrite(res, result);
  31.         }
  32.     });
  33. });
  34. // GET 请求
  35. // router.get('/getUser', (req, res) => {
  36. //     let sql = $sql.user.get;
  37. //     let params = req.query;
  38. //     console.log(params);
  39. //     conn.query(sql, (err, result) => {
  40. //         if (err) {
  41. //             console.log(err);
  42. //         }
  43. //         console.log(res, result);
  44. //     });
  45. // });
  46. // module.exports = router;
  47. router.post('/getUser', (req, res) => {
  48.     let sql = $sql.user.get;
  49.     let params = req.body;
  50.     console.log(params);
  51.     
  52.     conn.query(sql,[params.name], (err, result) => {
  53.         if (err) {
  54.             console.log(err);
  55.         }
  56.         if (result) {
  57.             jsonWrite(res, result);
  58.         }
  59.     });
  60. });
  61. module.exports = router;

由于直接访问8080端口,是访问不到的,所以这里需要设置一下代理转发映射.
在根目录中创建 的vue.config.js 文件,并写入以下内容

  1. module.exports = {
  2.   devServer: {
  3.     proxy: {
  4.       '/api': {
  5.         target: 'http://127.0.0.1:8888/api',
  6.         changeOrigin: true, // 解决跨域
  7.         pathRewrite: {
  8.           '^/api': '',
  9.         },
  10.       },
  11.     },
  12.   },
  13. };

用 cmd 或者 PowerShell 打开 server 文件执行 node index,出现这个说明启动成功

 注意:这里启动后服务器就不要关闭了,不然后面要报错,报错启动服务器就行在主页面编写

  1. <template>
  2.   <div class="hello">
  3.     姓名<el-input
  4.       v-model="name"
  5.       placeholder="请输入姓名"
  6.       class="w-50 m-2"
  7.     ></el-input>
  8.     <br>
  9.     年龄<el-input
  10.       v-model="age"
  11.       placeholder="请输入年龄"
  12.       class="w-50 m-2"
  13.     ></el-input>
  14.      <br>
  15.     <el-button @click="insert">录入</el-button>
  16.    <br>
  17.     姓名<el-input
  18.       v-model="queryname"
  19.       placeholder="请输入姓名"
  20.       class="w-50 m-2"
  21.     ></el-input> <br>
  22.     <el-button @click="query">查询</el-button>
  23.   </div>
  24. </template>
  25. <script>
  26. import axios from "axios";
  27. export default {
  28.   data() {
  29.     return {
  30.       name: "",
  31.       age: "",
  32.       queryname: "",
  33.     };
  34.   },
  35.   mounted() {},
  36.    methods: {
  37.     insert() {
  38.       let name = this.name;
  39.       let age = this.age;
  40.       let id = 5;
  41.       axios
  42.         .post(
  43.           "/api/user/addUser",
  44.           {
  45.             id,
  46.             name,
  47.             age,
  48.           },
  49.           {}
  50.         )
  51.         .then((res) => {
  52.          if(res.status==200){
  53.            alert("录入成功")
  54.          }
  55.         });
  56.     },
  57.     query() {
  58.       let name = this.queryname;
  59.       // ! 这里不能在浏览器控制台里面打印出来,但是在服务端(cmd中或者power shell)可以打印出来,可以在服务端将值保存在 vuex 中
  60.       axios
  61.         .post("/api/user/getUser", { name },{})
  62.         .then((res) => {
  63.           if(res.status==200){
  64.             console.log(res);
  65.             this.name=res.data[0].name;
  66.             this.age=res.data[0].age
  67.           }
  68.         })
  69.         .catch((error) => {
  70.           console.log(error);
  71.         });
  72.     },
  73.   },
  74. };
  75. </script>
  76. <style scoped>
  77. .el-input{
  78.   width: 30%;
  79.   margin: 10px;
  80. }
  81. </style>

完成后关闭编辑器重新打开运行npm run serve


录入

 

查询

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/120307
推荐阅读
相关标签
  

闽ICP备14008679号