Nodejs + express + sql 学习记录(一)

133 阅读1分钟

1:安装express-generotar生成程序骨架

npm install -g express-generator

-g: 全局安装可以在机器任何位置使用它

2: 连接数据库 mysql

  • 下载 mysql 插件
npm install mysql --save
  • 创建 config 目录
  • 创建 db.js 文件(根据开发环境去分别写配置)
// 根据环境参数设置不同的配置
const env = process.env.NODE_ENV;

// 配置
let MYSQL_CONF
let REDIS_CONF

if(env === 'dev'){
  MYSQL_CONF = {
    host: 'localhost',
    user: 'root',
    password: 'root',
    port: '3306',
    database: 'myblog'
  }

  // redis settings
  REDIS_CONF = {
    port: 6379,
    host: '127.0.0.1'
  }
}

if(env === 'production'){
  MYSQL_CONF = {
    host: 'localhost',
    user: 'root',
    password: 'root',
    port: '3306',
    database: 'myblog'
  }

    // redis settings
    REDIS_CONF = {
      port: 6379,
      host: '127.0.0.1'
    }
}

module.exports = {
  MYSQL_CONF,
  REDIS_CONF
}
  • 创建 db 文件夹
  • 创建 mysql.js 文件(连接数据库)
const mysql = require('mysql');
const { MYSQL_CONF } = require('../config/db')

// 创建链接对象
const con = mysql.createConnection(MYSQL_CONF)
// 开始连接
con.connect()

// 统一执行sql的函数
function exec(sql){
  const promise = new Promise((resolve, reject) => {
    con.query(sql, (err, res) => {
      if(err){
        reject(err);
        return
      }
      resolve(res);
    })
  })
  return promise
}

module.exports = {
  exec,
  escape: mysql.escape
}

3: API 对接 mysql

  • 创建 controller 文件夹
  • 根据不同的 API 分别创建 js 文件
  • 拿 blog.js 进行举例
    (sql 语句有个 where 1=1 是为下面 author 和 keyword 的存在做铺垫,如果只留的有 where 或者不写 where, 语句都不好拼接) (sql 每个语句结束前有个空格)
const { exec } = require('../db/mysql')
const getList = (author, keyword) => {
  let sql = `select * from blogs where 1=1 `
  if(author){
    sql += `and author='${author}' `
  }
  if(keyword){
    sql += `and title like '%${keyword}%' `
  }
  sql += `order by createtime desc;`
  return exec(sql);
}

4: router 里处理请求并返还数据

  • 创建 routes 文件夹
  • 分别根据 API 创建对应 js 文件
  • 拿 blog.js 进行举例
var express = require('express');
var router = express.Router();
// 提取 sql 方法
const { getList } = require('../controller/blog')
const { SuccessModel, ErrorModel } = require('../model/resModel')

router.get('/list', function (req, res, next) {
  let author = req.query.author || ''
  const keyword = req.query.keyword || ''
  const result = getList(author, keyword)
  return result.then(listData => {
    res.json(
      new SuccessModel(listData)
    )
  })
});
module.exports = router;