保存剪切板内容

前置内容

  1. 【Nodejs express 连接Mysql】: https://www.hyz.cool/articles/207
  2. 【Nodejs express 连接 Redis】: https://www.hyz.cool/articles/208
  3. 【统一后端返回数据格式——云剪切板】: https://www.hyz.cool/articles/209

路由

  • ClipboardController.js
const express = require("express");
const ClipboardController = express.Router();

const ClipboardService = require("../services/ClipboardService")

/**
 * 保存剪切板
 */
ClipboardController.post("/save",ClipboardService.saveClipboard)

module.exports = ClipboardController;
js

数据库访问

  • ClipboardDao.js
import {Query} from "../services/MysqlService";

/**
 * 删除用户多出的剪切板
 * @param userId
 * @param count
 * @returns {Promise<unknown>}
 */
export const deleteClipboard = (userId, count) => {
    return Query("DELETE FROM `tb_clipboard` WHERE `user_id` = ? ORDER BY `create_time` LIMIT ? ", [userId, count])
}
/**
 * 删除用户多出的剪切板
 * @param userId
 * @param content
 * @returns {Promise<unknown>}
 */
export const deleteClipboardByContent = (userId, content) => {
    return Query("DELETE FROM `tb_clipboard` WHERE `user_id` = ? AND `content` = ?", [userId, content])
}

/**
 * 保存剪切板
 * @param content
 * @param userId
 * @param platform
 * @param status
 * @returns {Promise<unknown>}
 */
export const saveClipboard = (content, userId, platform = VALUE.PLATFORM.WEB, status) => {
    return Query("INSERT INTO `tb_clipboard` (`content`,`user_id`,`platform`,`status`,`create_time`,`update_time`) VALUES (?,?,?,?,NOW(),NOW())", [content,userId,platform,status])
}
js

服务实现

  • ClipboardService.js
const Result = require("../utils/Result");
const ClipboardDTO = require("../dtos/ClipboardDTO");

const validator = require("express-validator");

const ClipboardDao = require("../daos/ClipboardDao")
const TokenService = require("../services/TokenService")


/**
 * 保存板状态
 */
export const saveClipboard = [
    validator.body("content", "剪切板内容不能为空").isLength({min: 1}),
    validator.body("userId", "用户id不能为空").isLength({min: 1}),
    (req, res, next) => {
        //校验参数
        let validationResult = validator.validationResult(req)
        if (!validationResult.isEmpty()) return Result.result(res, Result.invalidParams(validationResult.array()));

        //拿到参数
        let {content, userId, platform} = req.body

        let status = 0
        if (!platform) platform = VALUE.PLATFORM.WEB

        //检查是否登陆
        TokenService.getLoginUser(req).then(userDTO => {
            //判断是否登陆
            if (!userDTO) return Result.result(res, Result.notLogin());
            //判断id是否一致
            if ((userDTO.id + "") !== (userId + "")) return Result.result(res, Result.noAuth())
            //校验通过,查看余额
            let count = userDTO.count

            ClipboardDao.countClipboard(userId).then(result => {
                let dbCount = 10
                if (result.length > 0) dbCount = result[0].count
                if (count <= dbCount)
                    ClipboardDao.deleteClipboard(userId, dbCount - count + 1).then(result => {
                        return save()
                    }).catch(err => {
                        return Result.result(res, Result.failed("删除剪切板失败!"))
                    })
                else return save()
            }).catch(err => {
                return Result.result(res, Result.failed("获取剪切板数量失败!"))
            })
        }).catch(err => {
            return Result.result(res, Result.failed("检查登陆失败!"))
        })

        /**
         * 保存剪切板数据
         */
        function save() {
            ClipboardDao.deleteClipboardByContent(userId, content).then(() => {
                ClipboardDao.saveClipboard(content, userId, platform, status).then(() => {
                    return Result.result(res, Result.success("保存成功!"))
                }).catch(err => {
                    console.log("list clipboard error ...", err)
                    return Result.result(res, Result.failed("保存失败!"))
                })
            }).catch(err => {
                return Result.result(res, Result.failed("删除剪切板失败!"))
            })
        }
    }]
js
打赏
  • 微信
  • 支付宝
评论
来发评论吧~
···

歌手: