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;