下面用建立博客的方式,获取后台博客列表的信息的代码解释:
这是appp.js中的内容。是基本的功能层:
const headleBlogRouter = require("./src/router/blog");
const headleUserRouter = require("./src/router/user");
const querystring = require("querystring");
//用于处理post Data 、、异步
const getPostData = (req)=>{
const promise = new Promise((resolve,reject)=>{
if(req.method !== "POST"){
resolve({});
return
}
if(req.headers["content-type"] !== 'application/json'){
resolve({});
return
}
let postData ="";
req.on("data", chunk =>{
postData += chunk.toString() //记录客户端上传的数据
})
req.on("end", ()=>{ //客户端上传结束
//返回客户上传数据内容
if(!postData){
resolve({});
return;
}
resolve(
JSON.parse(postData)
)
})
})
return promise;
}
const serverHandle = (req,res) =>{
//设置返回格式
res.setHeader("content-type", "application/json");
//获取PATH;
const url = req.url;
req.path = url.split('?')[0];
//解析query
req.query = querystring.parse(url.split("?")[1]);
//处理post Data
getPostData(req).then(postData => {
req.body = postData;
//处理blog路由;
const blogResult = headleBlogRouter(req,res);
if(blogResult){
blogResult.then(blogData =>{
res.end(
JSON.stringify(blogData)
)
})
return
}
res.writeHead(404,{"Content-type":"text/plain"});
res.write("404 Not Found\n");
res.end();
})
}
module.exports = serverHandle;
这是路由处理层:
const {getList,} = require("../controller/blog");
const {SuccessModel ,ErrorModel} = require("../model/resModel");
const headleBlogRouter = (req,res)=>{
const method = req.method;
const id= req.query.id;
//获取博客列表
if(method === "GET" && req.path === "/api/blog/list"){
const author = req.query.author || "";
const keyword = req.query.keyword ||"";
// const listData = getList(author,keyword);
// return new SuccessModel(listData);
const result = getList(author,keyword);
return result.then(listData =>{
return new SuccessModel(listData);
})
}
}
module.exports = headleBlogRouter;
这是数据处理层:
const { exec} = require('../db/mysql');
//获取博客列表
const getList = (author, keyword)=>{
let sql = `select * from blogs where 1=1 `;
if(author){
sql += `and author = '${author}' `;
}
if(keyword){
sql += `and title like '%${keyword}%' `;
}
sql += `order by createtime desc;`;
//返回的是一个promise
return exec(sql);
}
module.exports ={
getList
}
这是链接数据库层
const mysql = require('mysql');
const{ MYSQL_CONF } = require('../conf/db');
//创建连接对象
const con =mysql.createConnection(MYSQL_CONF);
//开始连接
con.connect();
//统一执行sql的函数
function exec(sql){
const promise = new Promise((resolve, reject)=>{
con.query(sql,(err, result) =>{
if(err){
reject(err);
return;
}
resolve(result);
})
})
return promise;
}
module.exports = {
exec
}
这是数据库环境配置层:
const env = process.env.NODE_ENV //环境参数、环境变量;
//配置
let MYSQL_CONF;
if(env === 'dev'){
MYSQL_CONF = {
host: "localhost",
user: 'root',
password: "这里是你自己的密码",
port: '3306',
database: 'myblog'
}
}
module.exports = {
MYSQL_CONF
}
本地运行一下:
等我有时间了回来加详细的注释