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}`)
})
访问接口测试一下:
😜喜欢文章或文章内容对您有帮助点个赞鼓励一下吧~