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') // 读文件模块
let server = express() // 建立服务器 let serPort = 8080 // 监听端口 启动:node app.js(当前js文件名) 浏览器访问:localhost:8080便可
由于这里使用的是mysql数据库,因此在安装node下mysql模块后,咱们还须要下载mysql数据库到本地,最后使用可视化工具进行操做数据库,这里我推荐使用Navicat for MySQLjavascript
let db = mysql.createPool({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(); })
由于我这里默认使用post请求,因此这里使用req.on('data') 和req.on('end')对请求 体进行了处理,若是使用get其实能够更简单,不须要上述函数 server.use('/error/v1/ErrorSend', (req, res)=>{ // 插入数据库 let data = '' // 这里有坑 必定空字符串(这里是由于post能够传输比较大的数据量, 当传输较大数据块时,实际上是一部分传输通过这样拼接就是一个完整的请求体了) req.on('data', (query)=>{ data+=query }) req.on('end', ()=> { let nextData = JSON.parse(data) 在这里添加执行与数据库交互代码 } })
// 插入数据库 server.use('/error/v1/ErrorSend', (req, res)=>{ // 插入数据库 let data = '' // 这里有坑空字符串 req.on('data', (query)=>{ data+=query }) req.on('end', ()=> { console.log(data, 'data') let nextData = JSON.parse(data) try { if (nextData.type !== undefined && nextData.errorMessage !== 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(${nextData.type}, '${nextData.errorName ? nextData.errorName : ''}', '${nextData.errorMessage}', '${nextData.corpid ? nextData.corpid : ''}', '${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}) } res.end() }) }else { console.log(123456) res.send({msg: '请求参数缺失', code: 0}) res.end() } } catch (err) { res.send({msg: '服务器开小差', code: 0}) res.end() } }) })
mysql代码以下:java
server.use('/error/v1/receiveErrorLog', (req, res) =>{ // 获取列表 let data = '' // 必定是空字符串 req.on('data', (param) => { data+=param }) req.on('end', ()=>{ let nextData = JSON.parse(data) let queryParam = `SELECT * FROM receive_error WHERE 1=1` if (nextData.type !== undefined) { queryParam+=` AND type = ${nextData.type}` } if (nextData.errorName !== undefined) { // errorName不为空时 queryParam+=` AND error_name LIKE '%${nextData.errorName}%'` } if (nextData.errorMessage !== undefined) { queryParam+=` AND error_message LIKE '%${nextData.errorMessage}%'` } if (nextData.corpid !== undefined) { queryParam+=` AND corpid = '${nextData.corpid}'` } 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 && nextData.endTime !== undefined) { queryParam+=` AND add_time Between ${nextData.startTime} AND ${nextData.endTime}` } 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)}) } }) })
我的意见,欢迎指点!!!node