node.js: 《express如何链接数据库》

express写的接口如何与数据库挂钩,修改到数据库里的数据?

HeidiSQL工具:https://www.heidisql.com/download.php

这里用轻量级数据库sqlite3做示范

一、在项目中安装插件:npm install sqlite3

导入数据库模块:

var sqlite3 = require("sqlite3").verbose();

引入数据库位置

var db = new sqlite3.Database(path.join(__dirname, "../db/demo.sqlite3"))

操作数据库:

//查询数据库
router.get('/testlist', (req, res) => {
    db.all("select * from `user`", [], (err, rows) => {
        if (err == null) {
            res.send(rows)
        } else {
            res.send(err)
        }
    })
})

为了方便管理,我新建一个路由专门操作数据库,不会全部代码挤在一个页面显得糅杂,

完整代码:

新建一个路由DBRouter.js:

const express = require("express")
const fs = require("fs")
const path = require("path")
var router = express.Router();

//导入模块
var sqlite3 = require("sqlite3").verbose();
//指定数据库位置  使用path拼接路径  __dirname打印结果为当前项目路径
var db = new sqlite3.Database(path.join(__dirname, "../db/demo.sqlite3"))

//查询数据库
router.get('/testlist', (req, res) => {
    //操作数据库 "SQL语句",[参数],(执行结果)
    //查询用all
    db.all("select * from `user`", [], (err, rows) => {//查询语句
        if (err == null) {
            res.send(rows)//返回结果
        } else {
            res.send(err)//返回报错
        }
    })
})

//插入数据
router.post('/add', (req, res) => {
    let json_body = req.body //获取前端传了的数据
    //插入语句  几个字段对用几个问号
    let inser_sql = "insert into `user` (`id`,`name`,`account`,`password`,`create_time`,`balance`) values (?,?,?,?,?,?)"
    //insert、update、delete用run方法   参数个数对应上面问号个数
    db.run(inser_sql, [json_body.id,json_body.name,json_body.account,json_body.password,json_body.create_time,json_body.balance], (err, rows) => {//查询语句
        if (err == null) {
            res.send('添加成功')//返回结果
        } else {
            res.send(err)//返回报错
        }
    })
})

//模块加载到路由上
module.exports = router;

在app.js引入路由,

app.use('/db',require("./router/DbRouter"))

在数据库插入JSON数据类型时,express无法解析JSON,可以在app.js中加入解析JSON的函数

const express = require('express') //引入模块
const app = express() //实例化模块
const port = 8080 //端口号

//解析JSON格式数据
app.use(express.json())

//解决跨域
app.use((req, res, next) => {
    res.header("Access-Control-Allow-Origin","*"); //允许跨域的域名 *代表允许任意域名跨域
    res.header("Access-Control-Allow-Headers","Content-Type"); //请求的头部 允许header的类型
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");  //跨域允许的请求方式
    if(res.method == 'OPTIONS') res.sendStatus(200);//让OPTIONS尝试请求快点结束
    else next();
    
});

//中间件链接数据库的路由
app.use('/db',require("./router/DbRouter"))
//拼装路径  前端页面可访问接口 
app.use(express.static(path.join(__dirname,'./public')))

//监听端口 
app.listen(port, () => {
    //监听成功打印以下语句
    console.log(`Example app listening on port ${port}`)
})

访问接口测试一下:

 

😜喜欢文章或文章内容对您有帮助点个赞鼓励一下吧~

posted @ 2022-10-29 16:16  小小小侠  阅读(310)  评论(0编辑  收藏  举报