node博客开发之列表信息处理
在整个博客开发的层级结构中我们主要有以下的层级区分,首先就是在bin目录下的www.js主要用于处理业务技术的部分,
其主要作为一个入口文件,前后台接口连接的模块代码都放在这个部分。app.js主要用于处理业务逻辑部分的代码,在这个
部分是将所有的数据引入,然后并对其进行处理。最后就是数据层,在这个部分主要是对后台数据的处理,增,查,删,改
等都是在这个部分处理。在src目录下的model下,主要是对处理的信息进行过滤,让其返回的数据符合要求。如果不符合要求
就返回一个提示。在路由层主要是对整个路由进行管理。在controller主要是对每个路由中需要的数据进行处理。
因此在这里首先讲关于信息的过滤,应该怎样去实现。原理很简单,如果满足所说的信息就返回一个成功的提示,如果不成功则返回一个错误的提示。erron: 0表示成功提示,erron: -1表示错误提示。下面则是整个信息过滤所实现的代码部分:
//处理发送的请求所获得信息是否符合要求
class BaseMOdel{
//data和message信息的获取
constructor(data,message){
//第一个参数传入的是message
if(typeof data === 'string'){
this.message = message;
data = null;
message = null;
}
if(data){
this.data = data;
}
if(message){
this.message = message;
}
}
}
//请求成功返回errno = 0 请求失败返回errno = -1
class SuccessModel extends BaseMOdel{
constructor(data,message){
super(data,message);
this.errno = 0;
}
}
class ErrorModel extends BaseMOdel{
constructor(data,message){
super(data,message);
this.errno = -1;
}
}
//导出SuccessModel和ErrorModel
module.exports = {
SuccessModel,
ErrorModel
}
博客列表信息的处理
在controller层我们在最初时模拟的一个假数据,然后返回这个假数据,最后就在路由层去获取到这个假数。
具体在controller中的返回的假数据代码如下:
const getList = (author,keywords) => {
//返回一个假数据,用假数据做调试
return[
{
id: 1,
titlt: '标题A',
content: '内容A',
createTime: '1567735082041',
author: 'zhangsan'
},
{
id: 2,
titlt: '标题B',
content: '内容B',
createTime: '1567735166943',
author: 'lisi'
}
]
}
module.exports = {
getList
}
最后就是在路由层对信息处理具体的代码如下:
if(method === 'GET' && req.path === '/api/blog/list'){
const author = req.query.author || '';
const keywords = req.query.keywords || '';
const listData = getList(author,keywords);
return new SuccessModel(listData);
}
博客详情处理
同样的处理方式在controller文件夹下的blog中新建一个函数,用于表示博客详情的内容在这里我们将其命名为getDetail
然后将其导出
const getDetail = (id) => {
return[
{
id: 1,
titlt: '标题A',
content: '内容A',
createTime: '1567735082041',
author: 'zhangsan'
}
]
}
最后就是在路由层去处理这个信息,通过require去引入,然后在通过路由在浏览器中去获取到这个信息具体的处理部分
的代码如下:
if(method === 'GET' && req.path === '/api/blog/detail'){
const detailData = getDetail(id);
return new SuccessModel(detailData);
}
接下来就是对于post请求的处理,在之前也说过get与post的处理方式是不同的,因为我们需要获取到post发送给服务
器端的内容。因此在这里我们需要进行的就是封装一个函数去post请求。在这里采用的是ES6中的Promise来进行这个
异步的处理过程。首先在这个部分我们先来说明以下Promise的使用方式
const promise = new Promise((resolve,reject) => {})这一行代码就简单的表示了其内部的使用方式,在Pormise中
有两个参数第一个是resolve表示将成功部分的代码放在这个部分,reject表示失败之后的代码处理部分。在Promise返回
出的对象中还有一个then方法,对于Promise其可以满足一个链式调用的过程。可以对上一步返回的Promise对象所返回
的内容作进一步的处理。说完Promise,那么接下来就是对于处理post请求的处理。处理post请求的目的是为了获取到
postData的数据。处理部分的代码如下:
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;
}
最后就是将所有有关路由的部分都放入这个部分,具体的代码如下:
getPostData(req).then(postData => {
req.body = postData;
//处理blog路由
const blogData = handleBlogRouter(req, res);
const userData = handleUserRouter(req, res);
if (blogData) {
res.end(
JSON.stringify(blogData)
)
return
}
if (userData) {
res.end(
JSON.stringify(userData)
)
return
}
//未命中路由就执行下面的操作
res.writeHead(404, { "Content-type": "text/plain" });
res.write("404 Not Found\n");
res.end()
})
}
这就是一个数据跑通的所有过程,对于其他的数据逻辑处理,在这里就不过多的叙述,整个实现的流程都是一样的,不同之处在于对应的路由处理的信息不同,需要看之后部分的就去参考https://github.com/whocareit/node_blog中的blog_1部分下载即可。