node博客开发之列表信息处理

                                                         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部分下载即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值