⽤node做后台写接⼝供(express+mysql+node)前端调⽤
1.引⼊相应模块
const express = require('express')
// 创建服务器express模块,express框架是原⽣api共存的,所以使⽤此框架时可以使⽤任何原⽣⽅法属性
const mysql = require('mysql') // mysql数据库模块
const log4js = require('log4js') // 打印log模块
const path = require('path') // 路径模块
const expressStatic = require('express-static') // 引⼊静态资源模块
const fs = require('fs') // 读⽂件模块
2.启动服务
let server = express() // 创建服务器
let serPort = 8080 // 监听端⼝
启动:node app.js(当前js⽂件名)
浏览器访问:localhost:8080即可
因为这⾥使⽤的是mysql数据库,所以在安装node下mysql模块后,我们还需要下载mysql数据库到本地,最后使⽤可视化⼯具进⾏操作数据库,这⾥我推荐使⽤Navicat for MySQL
3.建好数据库和表以及定义数据格式数据类型
4.使⽤node连接数据库如下
let db = atePool({host: '127.0.0.1', user: 'root',port: 3306,
password: '', database: 'xbb_front_tools_test'}) // 创建本地连接池
这⾥我设置node服务允许跨域请求,这样前端就不⾏配置代理了:
server.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*"); // 跨域处理
next();
})
5.接⼝请求我这⾥使⽤如下:
因为我这⾥默认使⽤post请求,所以这⾥使⽤('data') 和('end')对请求
体进⾏了处理,如果使⽤get其实可以更简单,不需要上述函数
server.use('/error/v1/ErrorSend', (req, res)=>{ // 插⼊数据库
let data = '' // 这⾥有坑⼀定空字符串(这⾥是因为post可以传输⽐较⼤的数据量,
当传输较⼤数据块时,其实是⼀部分传输经过这样拼接就是⼀个完整的请求体了)
<('data', (query)=>{
data+=query
})
<('end', ()=> {
let nextData = JSON.parse(data)
在这⾥添加执⾏与数据库交互代码
}
})
6.不熟悉的点就是mysql数据增删改查了,写mysql语句还是有点技巧的,这个得⾃⼰写的时候才能体会,以下是操作mysql代码:// 插⼊数据库
server.use('/error/v1/ErrorSend', (req, res)=>{ // 插⼊数据库
let data = '' // 这⾥有坑空字符串
<('data', (query)=>{
data+=query
})
<('end', ()=> {
console.log(data, 'data')
let nextData = JSON.parse(data)
try {
if (pe !== undefined && Message !== undefined && nextData.url !== undefined && nextData.userAgent !== undefined && nextData.platform !== undefined) {
let addTime = new Date().getTime()
db.query(`INSERT INTO receive_error (type,error_name, error_message, corpid, userid, url, user_agent, platform, add_time) VALUES(${pe}, '${Name ? Name : ''}', '${Message}', '${pid ? pid : ''}', '${nextData.userid ? nextData.userid : ''}', '${nextData.url}', '${nextData.userAgent}', '${nextData.platform}', ${addTime})`,
(err, data) =>{
if (err) {
console.log(err)
res.send({msg: '服务器开⼩差', code: 0})
}else {
res.send({msg: '操作成功', code: 1})
}
})
}else {
console.log(123456)
res.send({msg: '请求参数缺失', code: 0})
}
}
catch (err) {
res.send({msg: '服务器开⼩差', code: 0})
}
})
})
7.对上述存到数据进⾏筛选,并分页展⽰
mysql代码如下:
server.use('/error/v1/receiveErrorLog', (req, res) =>{ // 获取列表
let data = '' // ⼀定是空字符串
<('data', (param) => {
data+=param
})
<('end', ()=>{
let nextData = JSON.parse(data)
let queryParam = `SELECT * FROM receive_error WHERE 1=1`
if (pe !== undefined) {
queryParam+=` AND type = ${pe}`
}
if (Name !== undefined) { // errorName不为空时
queryParam+=` AND error_name LIKE '%${Name}%'`
}
if (Message !== undefined) {
queryParam+=` AND error_message LIKE '%${Message}%'`
}
if (pid !== undefined) {
queryParam+=` AND corpid = '${pid}'`
}
if (nextData.userid !== undefined) {
queryParam+=` AND userid = '${nextData.userid}'`
}
if (nextData.url !== undefined) {
queryParam+=` AND url LIKE '%${nextData.url}%'`
}
if (nextData.platform !== undefined) {
queryParam+=` AND platform = '${nextData.platform}'`
}
if (nextData.startTime !== undefined && dTime !== undefined) {
queryParam+=` AND add_time Between ${nextData.startTime} AND ${dTime}`
}
if (Object.keys(nextData).length > 2) {
let totalSql = queryParam
sqlPromise(totalSql,res).then((length) => {
queryParam+=` LIMIT ${((--nextData.currentPage) * nextData.pageSize)}, ${nextData.pageSize}`
filterQuery(queryParam, length, res)
}, (err) =>{
console.log(err)
})
}
if (Object.keys(nextData).length === 2) { // 针对初始化请求只传pageSize 和 currentPage
queryParam = `SELECT * FROM receive_error LIMIT ${((--nextData.currentPage) * nextData.pageSize)}, ${nextData.pageSize}` let totalSql = `SELECT * FROM receive_error`
sqlPromise(totalSql,res).then((length) => {
filterQuery(queryParam, length, res)
}, (err) => {console.log(err)})
}
})
})
navicat for mysql连接不成功个⼈意见,欢迎指点
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论