keywords.js 3.63 KB
/**
 *
 * @author: shijian<jian.shi@yoho.cn>
 * @date: 17/5/31
 */

'use strict';

const Router = require('koa-router');
const moment = require('moment');
const redisStore = require('koa-redis');
const redis = require("redis");
const client = redis.createClient();
const multi = client.multi();

client.on("error", function (err) {
    console.log("Error " + err);
});

const r = new Router();

const multiAsync=()=>{
    return new Promise(function (resolve, reject) {
        multi.exec(async function(errors, results) {
            if(errors)reject(errors);
            let res = results;
            resolve(res);
        });
    });
}

//查看
const getDataList = async(key, page)=>{
    let start = (page-1)*10;
    let end = (page)*10-1;
    multi.lrange(key, start, end);
    multi.LLEN(key);
    return multiAsync();
}

const getDataValues = async(arr)=>{
    arr.forEach(item=>{
        multi.get(item);
    });
    return multiAsync();
}
//删除
const delDataValues = async(arr)=>{
    arr.forEach(item=>{
        let key = `keywords_mana:${item}`;
        multi.del(key);
        multi.lrem('keywords_mana_list', 1, key);
    });
    return multiAsync();
}
//添加
const addDataValues = async(value)=>{
    let key=`keywords_mana:${value}`;
    multi.set(key, value);
    multi.lrem('keywords_mana_list', 1, key);
    multi.lpush('keywords_mana_list', key);
    
    return multiAsync();
}
//编辑
const editDataValues = async(value, oldValue)=>{
    try{
        await delDataValues([oldValue]);
        await addDataValues(value);
        return true;
    }catch(e){
        return false;
    }
    
}
//搜索
const searchDataValues = async(value)=>{
    let key=`keywords_mana:*${value}*`;
    multi.KEYS(key);
    return multiAsync();
}

r.get('/', async(ctx) => {
    await ctx.render('action/keywords');
});

r.get('/getKeywords', async(ctx) => {
    let q = ctx.request.query;
    let r = await getDataList("keywords_mana_list", q.currentPage, q.pageCount);
    let result = [];
    if(r[0].length)result = await getDataValues(r[0]);
    ctx.body = {
        code: 200,
        message: 'success',
        data: result,
        total:r[1]
    };
});

r.get('/delKeywords', async(ctx) => {
    let q = ctx.request.query;
    let keys = JSON.parse(q['keywords']);
    try{
        await delDataValues(keys);
        ctx.body = {
            code: 200,
            message: 'success',
            data: ''
        };
    }catch(e){
        ctx.body = {
            code: 500,
            message: 'fail',
            data: ''
        };
    }    
});

r.get('/addKeywords', async(ctx) => {
    let q = ctx.request.query;
    let key = q['keywords'];
    try{
        await addDataValues(key);
        ctx.body = {
            code: 200,
            message: 'success',
            data: ''
        };
    }catch(e){
        ctx.body = {
            code: 500,
            message: 'fail',
            data: ''
        };
    }    
});

r.get('/editKeywords', async(ctx) => {
    let q = ctx.request.query;
    let key = JSON.parse(q['keywords']);
    try{
        await editDataValues(key[0], key[1]);
        ctx.body = {
            code: 200,
            message: 'success',
            data: ''
        };
    }catch(e){
        ctx.body = {
            code: 500,
            message: 'fail',
            data: ''
        };
    }    
});

r.get('/searchKeywords', async(ctx) => {
    let q = ctx.request.query;
    let key = q['association'];
    let r = await searchDataValues(key);
    let result = [];
    if(r[0].length)result = await getDataValues(r[0]);
    ctx.body = {
        code: 200,
        message: 'success',
        data: result,
        total:1
    }; 
});
module.exports = r;