前端+nodejs+mysql实现前后端联通

打印 上一主题 下一主题

主题 1802|帖子 1802|积分 5406

创建项目


  • 目录布局


  • 创建项目


   npm init
  初始化项目

一路回车即可
当有 package.json这个文件的时候就相当于已经构建完毕
3. 设置package.json文件
  1. {
  2.   "name": "yes",
  3.   "version": "1.0.0",
  4.   "description": "",
  5.   "main": "index.js",
  6.   "scripts": {
  7.     "test": "echo "Error: no test specified" && exit 1",
  8.     "start": "node index.js" // 设置启动文件
  9.   },
  10.   "author": "",
  11.   "license": "ISC",
  12.   "dependencies": {
  13.     "mysql2": "^3.12.0" // 连接数据库的插件
  14.   }
  15. }
复制代码

  • 创建index.js到根目录上

  • 创建index.html文件和index.js平级
  • 创建component功能性代码
代码块

   粘贴上就能用这一套代码
index.js
  1. // 数据库的方法
  2. let mysqlFunction = require('./compents/heander')
  3. // 启动服务器的方法
  4. let serve = require('./compents/serve')
  5. let obj = {}
  6. obj['/select'] = mysqlFunction.select
  7. obj['/add'] = mysqlFunction.add
  8. obj['/del'] = mysqlFunction.del
  9. serve.creactServe(obj)
复制代码
index.html
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.   <title>Document</title>
  7. </head>
  8. <div class="abc"></div>
  9. <form action="http://localhost:3002/add" method="post">
  10.   名称<input type="text" name="name">
  11.   年龄 <input type="number" name="age">
  12.   性别  <select name="sex" id="">
  13.     <option value="男">男</option>
  14.     <option value="女">女</option>
  15.   </select>
  16.   <button type="submit">新增</button>
  17. </form>
  18. <body>
  19.   <script>
  20.    const abc= document.querySelector('.abc')
  21.    abc.addEventListener('click',(e)=>{
  22.     if (e.target.nodeName=='SPAN') {
  23. console.log('点击了');      
  24. var name = e.target.getAttribute('data-name');
  25. console.log(name);
  26. del(name)
  27.     }
  28.    })
  29.   //  删除
  30.   function del(params) {
  31.     const url = 'http://localhost:3002/del?name='+params;
  32.     fetch(url, {
  33.       method: 'GET',
  34.     })
  35.       .then(response => {
  36.         if (!response.ok) {
  37.           throw new Error('Network response was not ok');
  38.         }
  39.         return response.json(); // Parse the JSON from the response
  40.       })
  41.       .then(data => {
  42.        console.log(data);
  43.        getdata()
  44.       })
  45.       .catch(error => console.error('Error:', error));
  46.    }
  47.   //  查询
  48.    function getdata(params) {
  49.     const url = 'http://localhost:3002/select?age=23';
  50.     fetch(url, {
  51.       method: 'GET',
  52.     })
  53.       .then(response => {
  54.         if (!response.ok) {
  55.           throw new Error('Network response was not ok');
  56.         }
  57.         return response.json(); // Parse the JSON from the response
  58.       })
  59.       .then(data => {
  60.            let str = ``
  61.         data.forEach(i=>{
  62.           str+=`<div >${JSON.stringify(i)}<span data-name='${i.name}'>删除<span></div>`
  63.         })
  64.         abc.innerHTML= str
  65.       })
  66.       .catch(error => console.error('Error:', error));
  67.    }
  68.    getdata()
  69.   </script>
  70. </body>
  71. </html>
复制代码
heander.js
   这里是设置功能性代码的地方并且链接数据库的地方
  1. //  引入mysql方法
  2. let http = require('http')
  3. let mysql = require('mysql2')
  4. let pool = mysql.createPool({
  5.   user: 'root',
  6.   host: 'localhost',
  7.   password: '123456',
  8.   port: 3306,//端口号
  9.   database: 'mydemo' //连接的数据库
  10.   , waitForConnections: true,// 当没有可用连接时是否等待
  11.   connectionLimit: 10,     // 最大连接数量
  12.   queueLimit: 0            // 最大等待请求数量 (0 表示不限制)
  13. })
  14. // 连接数据库
  15. pool.getConnection((err) => {
  16.   if (err) {
  17.     console.log('连接失败');
  18.   } else {
  19.     console.log('连接成功');
  20.   }
  21. })
  22. // res 路径 和post请求参数
  23. // 查询
  24. async function select (response, data) {
  25.   console.log(data);
  26.   try {
  27.     response.writeHead('200', {
  28.       "Content-Type": 'application/json'
  29.     })
  30.     const [reslut] = await pool.promise().query(`select * from school where age=${data.age}`)
  31.     console.log(reslut);
  32.     response.end(JSON.stringify(reslut))
  33.   } catch (error) {
  34.     console.log(error);
  35.     response.writeHead('400', {
  36.       "Content-Type": 'application/json'
  37.     })
  38.     response.end(JSON.stringify(error))
  39.   }
  40. }
  41. // 新增
  42. async function add (response, data) {
  43.   console.log(data);
  44.   try {
  45.     response.writeHead('200', {
  46.       "Content-Type": 'application/json'
  47.     })
  48.     let sql = 'insert into school values(?,?,?,?)'
  49.     let values = [null, data.name, data.age, data.sex]
  50.     const [reslut] = await pool.promise().query(sql, values)
  51.     console.log(reslut);
  52.     response.end(JSON.stringify(reslut))
  53.   } catch (error) {
  54.     console.log(error);
  55.     response.writeHead('400', {
  56.       "Content-Type": 'application/json'
  57.     })
  58.     response.end(JSON.stringify(error))
  59.     return
  60.   }
  61. }
  62. // 删除
  63. async function del (response, data) {
  64.   console.log(data);
  65.   try {
  66.     response.writeHead('200', {
  67.       "Content-Type": 'application/json'
  68.     })
  69.     let sql = `delete from school where name='${data.name}'`
  70.     const [reslut] = await pool.promise().query(sql)
  71.     console.log(reslut);
  72.     response.end(JSON.stringify(reslut))
  73.   } catch (error) {
  74.     console.log(error);
  75.     response.writeHead('400', {
  76.       "Content-Type": 'application/json'
  77.     })
  78.     response.end(JSON.stringify(error))
  79.     return
  80.   }
  81. }
  82. module.exports = {
  83.   select,
  84.   add,
  85.   del
  86. }
复制代码
router.js
   这个主要是对于路由做处理,来判定用户输入的接口地点是否正确
  1. // let heander = require('./heander')
  2. function route (response, url, data, params) {
  3.   // console.log(url, data, params);
  4.   // console.log(data[url]);
  5.   if (typeof data[url] == 'function') {
  6.     data[url](response, params)
  7.   } else {
  8.     response.writeHead('404', {
  9.       "Content-Type": 'application/json'
  10.     })
  11.     response.end('{error:请输入正确路径}')
  12.   }
  13. }
  14. module.exports = route
复制代码
serve.js
   服务器模块
  1. let http = require('http')
  2. let url = require('url')
  3. let route = require('./router')
  4. const querystring = require('querystring');
  5. function creactServe (data) {
  6.   const createserver = http.createServer(async (req, res) => {
  7.     // // 设置 CORS 头部
  8.     res.setHeader('Access-Control-Allow-Origin', 'http://127.0.0.1:5500');
  9.     res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
  10.     res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  11.     // 判断get请求还是post请求
  12.     console.log(req.method);
  13.     if (req.method == 'GET') {
  14.       route(res, url.parse(req.url, false).pathname, data, url.parse(req.url, true).query)
  15.       // console.log(req.method);
  16.       // console.log(url.parse(req.url, true).query);
  17.       // res.end('{id:1}')
  18.     } else {
  19.       let data1 = []
  20.       // 这里是post请求
  21.       // 获取post参数
  22.       // 出现错误的时候
  23.       req.on('error', (err) => console.log(err))
  24.       // 当有数据的时候
  25.       req.on('data', (result) => data1.push(result))
  26.       // 当数据传输完毕以后
  27.       req.on('end', (result) => {
  28.         data1 = querystring.parse(Buffer.concat(data1).toString())
  29.         console.log(data1);
  30.         route(res, url.parse(req.url, false).pathname, data, data1)
  31.         // res.end(JSON.stringify(queryString.parse(data1)))
  32.       })
  33.     }
  34.     // 有人请求了以后才会执行这里面的代码
  35.     // req请求,res响应
  36.     // 设置请求头
  37.     // 返回json类型的格式
  38.   })
  39.   console.log('服务器启动成功');
  40.   // 设置端口
  41.   createserver.listen('3002', '127.0.0.1')
  42. }
  43. module.exports = { creactServe }
复制代码
如何使用

先启动服务,找到终端
   npm run start

这个就是在package.json中设置的

  然后再找到index.html文件

即可开始使用,现在现在功能,增删查询

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万万哇

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表