node_数据库模块化封装

复制代码
// 文件目录
|___router
|   |___index.js
|
|___service
|   |___index.js
|
|___src
|   |___index.html
|
|___index.js  //入口文件index.js
复制代码

入口文件index.js

复制代码
// Node 用 request 事件来处理请求响应,事件内使用分支语句处理不同路径的请求,
// 而 Express 封装了这些操作,使得代码简洁优雅
// 但如果请求路径变多,都写在 app.js 文件里的话,就会让这个入口文件变得臃肿且难维护
// 加上 Node 是模块化编程,所以应该将这些 app.get() 和 app.post() 都抽取出来作为一个路由模块 router.js

// Express 提供了一种更好的方式专门来包装路由
let express = require('express')
// 在处理程序之前在中间件中解析传入的请求参数(post请求传送的参数),该处理程序在req.body属性下可用。
let bodyParser = require('body-parser')

let router = require('./router/index.js')
let app = express()

// 解析应用程序/ x-www-form-urlencoded
// 该extended选项允许您在使用querystring库(when false)或使用qs库(when true)
// 解析URL编码的数据之间进行选择。“扩展”语法允许将丰富的对象和数组编码为URL编码格式,
// 从而使URL编码具有类似JSON的体验,默认值为true,但是不建议使用默认值
app.use(bodyParser.urlencoded({ extended: false}))
// 解析application / json
app.use(bodyParser.json())

//表示路由默认在/index.html后面  http://localhost:8888/index.html/interface
app.use('/index.html',router)
// app.use(router) // 根路由 http://localhost:8888/interface

//监听端口
app.listen(8888, ()=> {console.log(app.use);console.log(`server running port 8888`)})

//静态资源托管
app.use(express.static(__dirname+'/src'))
复制代码

router/index.js

复制代码
let express = require('express')

//创建一个容器
let router = express.Router()

let service = require('../service/index.js')

// 把路由挂载到router容器中
router.get('/getdata', (req, res) => {
  let operate = `SELECT * FROM newsTable`
  service.handle(operate, data => res.send(JSON.stringify(data)))
})

router.post('/adddata', (req, res) => {
  let params = req.body
  let operate = `INSERT INTO newsTable VALUES('${params.newsId}','${params.newsImg}','${params.newsTitle}','${params.newsDetail}');`
  service.handle(operate, data => {data ? res.send('success....') : res.send('fild....')})
})

router.post('/delete', (req, res) => {
  let params = req.body
  let operate = `DELETE FROM newsTable WHERE ${params.key}='${params.value}'`
  service.handle(operate, data => {data ? res.send('success....') : res.send('fild....')})
})

router.post('/update', (req, res) => {
  let params = req.body
  let operate = `UPDATE newsTable SET ${params.key}='${params.value}' WHERE ${params.whereKey}='${params.whereValue}'`
  console.log(operate)
  service.handle(operate, data => {data ? res.send('success....') : res.send('fild....')})
})

//导出模块
module.exports = router
复制代码

service/index.js

复制代码
// 引入模块
let mysql = require('mysql')

let options = {
  host     : 'localhost',    // 主机地址 (默认:localhost)
  user     : 'root',         // 用户名
  password : '123456',       // 密码
  database : 'newsdatabase'  // 数据库名
  // port, 端口号默认3306
  // charset  连接字符集(默认:'UTF8_GENERAL_CI',注意字符集的字母都要大写)
}
module.exports = {
  handle (operate, callback) {
    // 创建连接
    let connection = mysql.createConnection(options);
    // 连接数据库
    connection.connect();
    // 数据库语句操作
    connection.query(operate, function (error, results, fields) {
      if (error) throw error;
      callback(results)
    });
    // 断开数据库
    connection.end();
  }
}
复制代码

src/index.html

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="https://cdn.bootcss.com/axios/0.19.1/axios.js"></script>
</head>
<body>
  <button id="insertbtn">post添加数据</button>
  <button id="deletebtn">post删除数据</button>
  <button id="updatabtn">post修改数据</button>
  <button id="selectbtn">get查询数据</button>
</body>
  <script type="text/javascript">
  let data = {
    "newsId": "0013",
    "newsImg": "https://p1.pstatp.com/list/190x124/pgc-image/R6cefahHX9doHC",
    "newsTitle": "别傻傻不懂",
    "newsDetail": "2小时前"
  }
  insertbtn.onclick = async () => {
    let result = await axios({
      url: 'http://localhost:8888/adddata',
      method: 'post',
      data
    })
    console.log(result)
  }
  
  deletebtn.onclick = async () => {
    let result = await axios.post('/delete',{key: 'newsId', value: '0013'})
    console.log(result)
  }

  updatabtn.onclick = async () => {
    let result = await axios.post('/update',{
      key: 'newsImg',
      value: 'http://localhost:8888',
      whereKey:'newsId',
      whereValue: '0013'
    })
    console.log(result)
  }

  selectbtn.onclick = async ()=> {
    let result = await axios.get('/index.html/getdata')
    console.log(result)
  }

  </script>
</html>
复制代码

 

posted @   前端之旅  阅读(621)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示