express操作MySQLデータベースCRUDのカプセル化を実現

19681 ワード

1、目次構造
コアディレクトリ
  
	-- routes
		-- stu.js #  
	-- db 
		-- mysql.js #     
	-- controller
		-- stuController.js #   

2、コアコード
mysql.jsファイル
const mysql = require('mysql')

//        
const conn = mysql.createConnection({
    host: 'localhost',
	user: 'root',
	password: 'root',
	port: '3306',
	database: 'stusystem'
})
//     
conn.connect()

//  SQL   
function exec(sql,params) {
	const promise = new Promise((resolve,reject)=>{
		conn.query(sql, params, (err,result) => {
			if(err){
				reject(err);
				return;
			}
			resolve(result);
		})
	});
	return promise;
}

module.exports = exec

stuController.jsファイル
const exec = require('../db/mysql')

//      
const add = (stu) => {
  const sql = 'insert into stu(stuname,age,sex) values(?,?,?)'
  const params = [stu.name,stu.age,stu.sex]
  return exec(sql,params).then(insertStu=>{
      return {
          id: insertStu.insertId
      }
  })
}

//    
const query = ()=> {
    const sql = "select * from stu"
    return exec(sql).then(data=>{
        return data
    })
}

//    
const update = (stu)=> {
    const sql = "update stu set stuname=?,age=?,sex=? where sid=?"
    const params = [stu.name,stu.age,stu.sex,stu.id]
    return exec(sql,params).then(data=>{
        return {
            row: data.affectedRows
        }
    })
}

//    
const del = (id)=> {
    const sql = "delete from stu where sid=?"
    const params = [id]
    return exec(sql,params).then(data=>{
        return {
            row: data.affectedRows
        }
    })
}

module.exports = {
    add,query,update,del
}

routes/stu.jsファイル
let express = require('express')
let router = express.Router()
let bodyParser = require('body-parser')
let stu = require('../controller/stuController')

//      form    
let urlencodedParser = bodyParser.urlencoded({ extended: true })

//    
router.post('/add',urlencodedParser,(req,res,next)=>{
    let result = stu.add(req.body)
    result.then(data=>{
        if(data.id > 1){
            res.json({
                code: 200,
                msg: "    ",
                data
            })
        }else{
            res.json({
                code: 500,
                msg: "    ",
                data
            })
        }
    })
   
})

//    
router.get('/query',(req,res,next)=>{
    let result = stu.query();
    result.then(data=>{
        res.json({
            data
        })
    })
})

//    
router.post('/update',urlencodedParser,(req,res,next)=>{
    let result = stu.update(req.body)
    result.then(row=>{
        res.json({
            row
        })
    })
})

//    
router.get("/del",(req,res,next)=>{
    let result = stu.del(req.query.id)
    result.then(row=>{
        res.json({
            row
        })
    })
})

module.exports = router