express+mysql+node操作数据库

目标:
基于nodejs 用express + mysql 包 写接口,实现学生数据添加。

接口1
添加学生数据
url: localhost:3000/api/student
method: post
参数格式:普通键值对

name: 字符串
age: 数值
测试:postman来测试
接口2
获取所有的学生数据
url: localhost:3000/api/student
method: get
参数:无
测试:postman来测试

实现步骤
1. 新建一个项目文件夹,进行项目初始化
终端窗口输入命令: npm init --yes
初始化完成会在项目文件夹下生成会生成package.json文件

2. 下载安装express 和 mysql
终端窗口输入命令: npm i express mysql
安装完成,会在项目文件夹下生成node_modules文件夹和package-lock.json文件,如下所示

 

 3. 创建utills文件夹,并在其下面创建sql.js文件用来模块化mysql,项目结构如下:

 

 4. 操作sql.js,模块化mysql
4.1 使用加载mysql
4.2 创建连接mysql对象
4.3 连接到MySQL服务器
4.4 导出mysql
具体操作如图所示:

 

 5. 打开phpstdudy软件,开启MySQL,连接数据库

 

 

 6. 在项目根目录中创建server.js文件操作数据库
6.1 导入express并调用
6.2 导入sql模块
6.3 设置接收参数格式为普通键值对格式
6.4 设置post路由接口,操作数据库,向数据库中添加人员信息
具体操作如下:

//-----------测试端口代码,连接服务器代码-------------
//-----------封装的msq代码,在上面---------------
 
// 引入模块express,mysql
const experss = require('express')
const mysql = require('mysql')
// -------------将mysql的前三步自定义模板化,放在tools文件夹下--------
const connection = require('./tools/msq')
const app = experss()
// 接收简单的键值对
app.use(experss.urlencoded())
// 书写post请求
app.post('/api', (req, res) => {
    // 解构赋值,将接收到的数据赋值
    // 接收到的数据储存在req.body中
    const { name, age } = req.body
    // 书写sql语句,定义sql
    // 模板化字符串,使用${}接收变量
    // 因为传入的变量没有加引号,所以变量之前增加引号
    const sql = `insert into student (name ,age) values('${name}','${age}')`
    // console.log('连接的sql', sql)  打印拼接后的sql语句
    // mysql模块的第四步,第一个参数为sql语句,第二个参数为回调函数(回调函数的参数)
    // 回调参数:第一个为err错误,第二个data为对数据库操作的一个对象集合
    connection.query(sql, (err, data) => {
        // 如果错误,返回添加失败
        if (err) {
            res.send({ hint: '添加失败', state: 1 })
        } else {
            // 成功则返回 成功的信息
            res.send({
                // data.insertId为数据库的索引Id值
                hint: '添加成功,添加的id为: ' + `${data.insertId}`,
                state: 0,
                data: data,
            })
        }
    })
})

app.listen(8000, () => {
    console.log('服务器启动了,8000')
})

6.5 获取所有人员信息的路由接口

app.get('/api', (req, res) => {
    const sql = `select id,name,age from student`
    connection.query(sql, (err, data) => {
        if (err) {
            res.send({ hint: '获取失败', state: 1 })
        } else {
            res.send({ hint: '获取成功', state: 0, data: data })
        }
    })
})

6.6 启动服务器

 7. 打开postman测试接口,并检查数据库是否更新
7.1 测试接口

 7.2 测试结果

7.3 数据库已更新

 

 7.4 路由中间件

 7.5拆分

// 导入模块
const experss = require('express')
// 导入数据库
const connection = require('../tools/msq')
// 路由方法
const router = experss.Router()
const fs = require('fs')
// 接收简单键值对
router.use(experss.urlencoded())
function getClientIp(req) {
    return (
        req.headers['x-forwarded-for'] ||
        req.connection.remoteAddress ||
        req.socket.remoteAddress ||
        req.connection.socket.remoteAddress
    )
}
router.use('/api', (req, res, next) => {
    let obj = {
        time: new Date().toLocaleString(), //访问时间
        url: req.url, // 访问地址
        ip: getClientIp(req), // ip地址
    }
    let data = JSON.stringify(obj)
    fs.appendFile('usename', data, (err, data) => {
        if (err) {
            console.log('追加错误', err)
            return
        }
    })
    // 输出日志
    // console.log('现在是', new Date())
    // console.log('访问的地址是', req.url)
    // console.log('ip是', getClientIp(req))
    next()
})
router.post('/api', (req, res) => {
    // 解构赋值,将接收到的数据赋值
    // 接收到的数据储存在req.body中
    const { name, age } = req.body
    // 书写sql语句,定义sql
    // 模板化字符串,使用${}接收变量
    // 因为传入的变量没有加引号,所以变量之前增加引号
    const sql = `insert into student (name ,age) values('${name}','${age}')`
    // console.log('连接的sql', sql)  打印拼接后的sql语句
    // mysql模块的第四步,第一个参数为sql语句,第二个参数为回调函数(回调函数的参数)
    // 回调参数:第一个为err错误,第二个data为对数据库操作的一个对象集合
    connection.query(sql, (err, data) => {
        // 如果错误,返回添加失败
        if (err) {
            res.send({ hint: '添加失败', state: 1 })
        } else {
            // 成功则返回 成功的信息
            res.send({
                // data.insertId为数据库的索引Id值
                hint: '添加成功,添加的id为: ' + `${data.insertId}`,
                state: 0,
                data: data,
            })
        }
    })
})
// gat接口 - 步骤同post基本一致 , 具体传入的sql语句不同
router.get('/api', (req, res) => {
    const sql = `select id,name,age from student`
    connection.query(sql, (err, data) => {
        if (err) {
            res.send({ hint: '获取失败', state: 1 })
        } else {
            res.send({ hint: '获取成功', state: 0, data: data })
        }
    })
})
module.exports = router

 7.6 合并

// server.js express项目的主文件
const express = require('express')


const app = express()


// 导入
const apiRouter = require('./router/api.js')


app.use('/router', apiRouter)


app.listen(3000, () => {
    console.log(3000)
})


版权声明:本文为weixin_51750861原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。