Nodejs加Vue.js的简单增删改查

叁歲伎倆 2022-04-22 07:44 395阅读 0赞

用的node做的后台,数据库为mysql,数据交互和页面渲染用的vue,项目目录图:

20181103142936679.png

话不多说,首先来看node项目的配置文件app.js,注释我会写在代码里

  1. //引用模块
  2. var express = require('express');
  3. var path = require('path');
  4. var favicon = require('serve-favicon');
  5. var logger = require('morgan');
  6. var cookieParser = require('cookie-parser');
  7. var bodyParser = require('body-parser');
  8. var index = require('./routes/index');
  9. var persons = require('./routes/person');
  10. var app = express();
  11. // view engine setup
  12. // app.set('views', path.join(__dirname, 'views'));
  13. // app.set('view engine', 'ejs');
  14. //修改后的
  15. app.set('views', path.join(__dirname, './views'));
  16. app.engine('.html', require('ejs').__express);
  17. app.set('view engine', 'html');
  18. app.use(logger('dev'));
  19. app.use(express.json());
  20. app.use(express.urlencoded({extended: false}));
  21. app.use(cookieParser());
  22. //全局访问
  23. app.all('*', function (req, res, next) {
  24. res.header('Access-Control-Allow-Origin', '*');
  25. res.header('Access-Control-Allow-Headers', 'Content-Type,Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
  26. res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE,OPTIONS');
  27. if (req.method == 'OPTIONS') {
  28. res.send(200);
  29. }
  30. else {
  31. next();
  32. }
  33. });
  34. //引入public文件夹,让页面能获取到public文件夹内的文件
  35. app.use(express.static(path.join(__dirname, 'public')));
  36. app.use('/', index);
  37. app.use('/persons', persons);
  38. app.use(express.static(__dirname));
  39. // app.use(express.static(__dirname + '../public'));
  40. // catch 404 and forward to error handler
  41. app.use(function (req, res, next) {
  42. next(createError(404));
  43. });
  44. // error handler
  45. app.use(function (err, req, res, next) {
  46. // set locals, only providing error in development
  47. res.locals.message = err.message;
  48. res.locals.error = req.app.get('env') === 'development' ? err : {};
  49. // render the error page
  50. res.status(err.status || 500);
  51. res.render('error');
  52. });
  53. module.exports = app;

然后是连接数据库的js和路由配置

  1. //db.js
  2. // 连接MySQL
  3. var mysql = require('mysql');
  4. var pool = mysql.createPool({
  5. host: 'localhost',//本机
  6. user: 'root',//数据库帐号
  7. password: 'root',//密码
  8. database: 'test'//数据库
  9. });
  10. function query(sql, callback) {//执行sql
  11. pool.getConnection(function (err, connection) {//err为错误信息 connection为连接数据库
  12. // Use the connection
  13. connection.query(sql, function (err, rows) {//rows为执行完sql的返回的信息
  14. callback(err, rows);//回调
  15. connection.release();//释放链接
  16. });
  17. });
  18. }
  19. exports.query = query;

路由,可部分可以理解为页面访问的链接配置,全程用的ajax访问数据

  1. var express = require('express');
  2. var router = express.Router();
  3. //引入数据库包
  4. var db = require("./db.js");
  5. /* GET listing. */
  6. // router.get('/', function(req, res, next) {
  7. // res.send('respond with a resource');
  8. // });
  9. /**
  10. * 查询列表页,直接访问
  11. */
  12. router.get('/', function (req, res, next) {
  13. res.render('persons', {title: '人员管理', datas: 123});
  14. });
  15. /**
  16. * 新增页面跳转
  17. */
  18. router.get('/add', function (req, res) {
  19. res.render('add');
  20. });
  21. router.post('/add', function (req, res) {
  22. var name = req.body.name;
  23. var age = req.body.age;
  24. var professional = req.body.professional;
  25. db.query("insert into person(name,age,professional) values('" + name + "'," + age + ",'" + professional + "')", function (err, rows) {
  26. if (err) {
  27. res.end('新增失败:' + err);
  28. } else {
  29. res.json(rows);//返回数据,为json格式
  30. }
  31. })
  32. });
  33. /**
  34. * 删
  35. */
  36. router.post('/del', function (req, res) {
  37. var id = req.body.id;
  38. db.query("delete from person where id=" + id, function (err, rows) {
  39. // console.log(rows);
  40. if (err) {
  41. res.end('删除失败:' + err)
  42. } else {
  43. res.json(rows);
  44. }
  45. });
  46. });
  47. /**
  48. * 修改
  49. */
  50. router.post('/update', function (req, res) {
  51. var id = req.body.id;
  52. var name = req.body.name;
  53. var age = req.body.age;
  54. var professional = req.body.professional;
  55. db.query("update person set name='" + name + "',age='" + age + "',professional= '" + professional + "' where id=" + id, function (err, rows) {
  56. if (err) {
  57. res.end('修改失败:' + err);
  58. } else {
  59. res.json(rows);
  60. console.log(rows);
  61. }
  62. });
  63. });
  64. /**
  65. * 查询
  66. */
  67. router.post('/search', function (req, res) {
  68. var name = req.body.s_name;
  69. var age = req.body.s_age;
  70. var professional = req.body.s_professional;
  71. // console.log(req.body);
  72. var sql = "select * from person where true ";
  73. if (name) {
  74. sql += " and name like '%" + name + "%' ";
  75. }
  76. if (age) {
  77. sql += " and age=" + age + " ";
  78. }
  79. if (professional) {
  80. sql += " and name like '%" + professional + "%' ";
  81. }
  82. // sql = sql.replace("and","where");
  83. db.query(sql, function (err, rows) {
  84. if (err) {
  85. res.end("查询失败:", err)
  86. } else {
  87. res.json(rows);
  88. }
  89. });
  90. });
  91. module.exports = router;

前台展示页面

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title><%= title %></title>
  6. <link rel="shortcut icon" href="#"/>
  7. <style>
  8. div {
  9. width: 800px;
  10. margin: 0 auto;
  11. }
  12. table {
  13. border-collapse: collapse;
  14. border-spacing: 0;
  15. width: 800px;
  16. }
  17. table tr td, table tr th {
  18. border-top: solid 1px #ccc;
  19. border-left: solid 1px #ccc;
  20. line-height: 40px;
  21. text-align: center;
  22. }
  23. table tr td:last-child, table tr th:last-child {
  24. border-right: solid 1px #ccc;
  25. }
  26. table tr:last-child td {
  27. border-bottom: solid 1px #ccc;
  28. }
  29. a {
  30. text-decoration: none;
  31. font-size: 14px;
  32. }
  33. .text {
  34. width: 150px;
  35. }
  36. </style>
  37. <!--../public/javascripts-->
  38. <script src="javascripts/jquery-3.3.1.js"></script>
  39. </head>
  40. <body>
  41. <div id="app">
  42. <span id="finds">
  43. <div style="">
  44. <div style="float: left;width:10%;">
  45. <a href="#" @click="edit()">新增</a>
  46. </div>
  47. <div style="float: right;width:90%;">
  48. <form action="/persons/search" method="post" onsubmit="return false" id="forms">
  49. 姓名:<input type="text" name="s_name" id="s_name" class="text">
  50. 年龄:<input type="number" name="s_age" id="s_age" class="text">
  51. 职业:<input type="text" name="s_professional" id="s_professional" class="text">
  52. <input type="submit" value="查询" @click="find()">
  53. </form>
  54. </div>
  55. </div>
  56. <table style="">
  57. <tr>
  58. <th width="10%">编号</th>
  59. <th width="15%">操作</th>
  60. <th width="15%">姓名</th>
  61. <th width="10%">年龄</th>
  62. <th width="50%">职业</th>
  63. </tr>
  64. <tr v-for="item in list">
  65. <td>{
  66. {item.id}}</td>
  67. <td>
  68. <a href="#" @click="remove(item.id)">删除</a>
  69. <a href="#" @click="edit(item)">修改</a>
  70. </td>
  71. <td>{
  72. {item.name}}</td>
  73. <td>{
  74. {item.age}}</td>
  75. <td>{
  76. {item.professional}}</td>
  77. </tr>
  78. </table>
  79. </span>
  80. <div style="width: 800px;margin: auto; display: none" id="edit">
  81. <form action="/persons/add" method="post" onsubmit="return false">
  82. <input type="hidden" id="id" name="id">
  83. 姓名:<input type="text" name="name" id="name">
  84. 年龄:<input type="number" name="age" id="age">
  85. 职业:<input type="text" name="professional" id="professional">
  86. <input type="button" value="提交" @click="edits()">
  87. <input type="button" value="返回" @click="backtrack()">
  88. </form>
  89. </div>
  90. </div>
  91. <script src="javascripts/vue.js"></script>
  92. <script>
  93. var vue = new Vue({
  94. el: '#app',
  95. data: {
  96. list: find(),
  97. },
  98. methods: {
  99. find: function () {//查询
  100. this.list = find();
  101. }, edit: function (item) {//点击编辑
  102. $('#finds').hide();
  103. $('#edit').show();
  104. $('#id').val(item.id);
  105. $('#name').val(item.name);
  106. $('#age').val(item.age);
  107. $('#professional').val(item.professional);
  108. }, edits: function () {//修改和添加
  109. if ($('#id').val() == "" || $('#id').val() == null) {
  110. add();
  111. } else {
  112. edit();
  113. }
  114. this.list = find();
  115. }, remove: function (id) {//删除
  116. if (confirm("确定要删除这条数据吗?")) {
  117. $.ajax({
  118. type: "post",
  119. url: "/persons/del",
  120. dataType: "json",
  121. data: {//传给servlet的数据,
  122. id: id,
  123. },
  124. async: false,//加上这个ajax先执行
  125. success: function (data) {
  126. if (data.affectedRows>0) {
  127. alert('删除成功');
  128. }else{
  129. alert('删除失败');
  130. }
  131. }
  132. });
  133. }
  134. this.list = find();
  135. },backtrack:function () {//返回
  136. $('#finds').show();
  137. $('#edit').hide();
  138. }
  139. }
  140. })
  141. //查询
  142. function find() {
  143. var data2;
  144. $.ajax({
  145. type: "post",
  146. url: "/persons/search",
  147. dataType: "json",
  148. data: {//传给servlet的数据,
  149. s_professional: $('#s_professional').val(),
  150. s_name: $('#s_name').val(),
  151. s_age: $('#s_age').val()
  152. },
  153. async: false,//加上这个ajax先执行
  154. success: function (data) {
  155. // console.log(data);
  156. //返回处理的方法
  157. data2 = data;
  158. }
  159. });
  160. return data2;
  161. }
  162. //修改
  163. function edit() {
  164. $.ajax({
  165. type: "post",
  166. url: "/persons/update",
  167. dataType: "json",
  168. data: {//传给servlet的数据,
  169. professional: $('#professional').val(),
  170. name: $('#name').val(),
  171. age: $('#age').val(),
  172. id: $('#id').val(),
  173. },
  174. async: false,//加上这个ajax先执行
  175. success: function (data) {
  176. //返回处理的方法
  177. console.log(data);
  178. if (data.affectedRows > 0) {
  179. alert('修改成功');
  180. $('#finds').show();
  181. $('#edit').hide();
  182. $('#id').val("");
  183. $('#name').val("");
  184. $('#age').val("");
  185. $('#professional').val("");
  186. } else {
  187. alert('修改失败');
  188. }
  189. }
  190. });
  191. }
  192. //添加
  193. function add() {
  194. $.ajax({
  195. type: "post",
  196. url: "/persons/add",
  197. dataType: "json",
  198. data: {//传给servlet的数据,
  199. professional: $('#professional').val(),
  200. name: $('#name').val(),
  201. age: $('#age').val(),
  202. id: $('#id').val(),
  203. },
  204. async: false,//加上这个ajax先执行
  205. success: function (data) {
  206. //返回处理的方法
  207. if (data.affectedRows > 0) {
  208. alert('添加成功');
  209. $('#finds').show();
  210. $('#edit').hide();
  211. $('#id').val("");
  212. $('#name').val("");
  213. $('#age').val("");
  214. $('#professional').val("");
  215. } else {
  216. alert('添加失败');
  217. }
  218. }
  219. });
  220. }
  221. </script>
  222. </body>
  223. </html>

发表评论

表情:
评论列表 (有 0 条评论,395人围观)

还没有评论,来说两句吧...

相关阅读

    相关 nodejs+express+mysql 增删

    写在最前面的话:         鉴于评论区的问题有点超出自己的想象,故重拾express,从头开始重新敲了一遍基于express的增删改查,希望大家有疑问先点击[这里][L