整体结构
1-安装依赖
`body-parser express mysql`
yarn init -y
yarn add body-parser express mysql
2-编写入口文件
app.js
//导入 post请求参数处理组件
const bodyParser=require('body-parser')
//路由
const user=require('./router/user.js') //user
//开启服务文件
const app=require('./bin/www.js')
//防止跨域
app.all('*', function (req, res, next) {
console.log(' ')
console.log('处理中...')
res.header("Access-Control-Allow-Origin", "*");
res.header("Content-Type", "application/json;charset=utf-8");
res.header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
if (req.method.toLowerCase() == 'options')
res.send(200); //让options尝试请求快速结束
else {
next();
}
});
//解决post请求参数问题
app.use(bodyParser.urlencoded({
extended: false
}))
app.use(bodyParser.json())
//注册路由
app.use('/user',user)
3-bin开启服务文件
www.js
//express插件
const express=require('express')
//顶级对象
const app=express()
//开启服务
const serve=app.listen('518',()=>{
let host=serve.address().address;
let port=serve.address().port;
if(host==='::')host='localhost';
console.log('欢迎观霖_______: http://%s:%s',host,port)
})
//暴露
module.exports=app
4-路由
router/user.js
//express插件
const express=require('express')
//创建一个路由
const user=express.Router()
//按需导入 操作数据库的函数
const {userList}=require('../operationSql/user.js')
//按需导入 普通函数
const {success,fail}=require('../methods/resFn.js')
//编写user路由
user.get('/userList',async (request,response)=>{
let {code,msg,data}=await userList()//数据库返回的信息
if(code===200){
response.send(success(msg,data))
}else{
response.send(fail(msg,data))
}
})
//暴露
module.exports=user
5-封装不同的情况 像数据库发送请求
operationSql/user.js
//对数据库进行操作
//链接数据库的函数
const {openSqlServe}=require('../openSql/open.js')
//获取所有信息
function userList(){
let cmdStr='select * from people';//数据库命令
return openSqlServe(cmdStr).then(res=>{
if(res){
return {code:200,msg:'拿到数据了',data:res}
}else{
return {code:200,msg:'暂无数据',data:[]}
}
}).catch(e=>{
console.log('数据获取失败')
return {code:500,msg:e,data:[]}
})
}
//暴露
module.exports={
userList
}
6-对数据库连接 进行封装
openServe/open.js
//fn:链接数据库 操作数据库
//mysql插件
const mySql=require('mysql')
//自己数据库的配置
const {mySqlConfig}=require('../config/user.js')
//当前项目数据库
let nowSql;
//创建连接数据库fn
function linkSqlServe(){
nowSql=mySql.createConnection(mySqlConfig);
nowSql.connect((err)=>{
if(err){
linkSqlServe()
console.log('数据库连接出错...重连中...')
}else{
console.log('数据库正常连接!')
}
});
nowSql.on('error',(err)=>{
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
console.log('数据库报错..重连中...')
linkSqlServe();
} else {
throw err;
}
})
}
//向数据库发送命令
function openSqlServe(cmdStr){
linkSqlServe()//每次发送命令前连接一次数据库
return new Promise((resolve,reject)=>{
nowSql.query(cmdStr,(err,result)=>{
if(err){
return reject(err)
}else{
console.log('数据库响应成功 ^_^')
return resolve(result)
}
})
})
}
//暴露
module.exports={
openSqlServe
}
7-数据库的配置信息
config/user.js
//我的数据库配置
const mySqlConfig={
host:'',//主机
port:'3306',//端口
user:'',//用户名
password:'',//密码
database:'',//数据库名
}
module.exports={
mySqlConfig
}
8-普通函数封装
methods/resFn.js
//处理返回给前端的数据
//返回一个成功状态的数据
function success(msg,data){
!msg&&(msg='');
!data&&(data='');
return {
code:200,
msg,
data,
}
}
//失败状态
function fail(msg,data){
!msg&&(msg='');
!data&&(data='');
return {
code:500,
msg,
data,
}
}
module.exports={
success,
fail,
}
运行结果
参考:https://blog.csdn.net/weixin_47284756/article/details/118460060