前言

  • 由于我司私服需要对某些包删除使用,但又不想误删,所以要整个黑名单,在该名单上的包无法下载和搜索。
  • 大概看了下,只要维护个黑名单表即可,另外再改点逻辑,对表写个添加,删除,查询接口即可。
  • 首先梳理下路由,会走那些控制器,再建个表,写入增删改查。

路由梳理

  • 下载包实际上是先查询,查到后走json的tar地址,所以在搜索时先查黑名单,黑名单里的直接返回404

页面搜索

controllers:web:package:search

页面详情

controllers:web:package:show

下载(查询地址后)

controllers:registry:download
controllers:registry:package:save

查询(下载前)

controllers:registry:package:list

建表

  • 建表在docs的db.sql里
  • 直接再复制个表:
CREATE TABLE IF NOT EXISTS `black_list` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key',`gmt_create` datetime NOT NULL COMMENT 'create time',`gmt_modified` datetime NOT NULL COMMENT 'modified time',`name` varchar(214) NOT NULL COMMENT 'pkg name',PRIMARY KEY (`id`),UNIQUE KEY `uk_name` (`name`),KEY `idx_gmt_modified` (`gmt_modified`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='black list info';
  • models/index.js中载入model
 BlackList: load("black_list"),
  • 新建black_list
"use strict";module.exports = function (sequelize, DataTypes) {return sequelize.define("BlackList",{name: {type: DataTypes.STRING(214),allowNull: false,comment: "module name",},},{tableName: "black_list",comment: "module black list",indexes: [{unique: true,fields: ["name"],},],classMethods: {},});
};
  • controller中添加操作:
"use strict";var blackListService = require("../../../services/black_list");exports.addBlackList = function* () {var name = this.request.body.name;const res = yield blackListService.addBlackList(name);this.body = res;
};
exports.getBlackList = function* () {var name = this.request.body.name;const res = yield blackListService.getBlackList(name);if (!res){this.body = {err: "not found",};} else {this.body = res;}
};
exports.deleteBlackList = function* () {var name = this.request.body.name;const res = yield blackListService.deleteBlackList(name);if (res === 1) {this.body = {success: true,};} else {this.body = {success: false,};}
};
  • services中添加操作:
"use strict";var models = require("../models");
var blacklist = models.BlackList;exports.getBlackList = function* (name) {var rows = yield blacklist.find({where: {name: name,},});return rows;
};exports.addBlackList = function* (name) {var item = blacklist.build({name: name,});yield item.save();return item;
};
exports.deleteBlackList = function* (name) {var item = yield blacklist.destroy({where: {name: name,},});return item;
};
  • 添加路由
app.post("/blacklist/addpkg", blackList.addBlackList);app.post("/blacklist/deletpkg", blackList.deleteBlackList);app.post("/blacklist/getpkg", blackList.getBlackList);
  • 此时增删查已经可以了,下面黑名单的直接不给下载就在list查询处返回404即可:
  const blackres = yield blackListService.getBlackList(name);if (blackres) {this.status = 404;return;}
  • 在搜索时搜到不影响,在详情页面web/package/show增加废弃提示:
  const blackres = yield blackListService.getBlackList(pkg.name);if (blackres) {pkg.name = pkg.name + "-@已废弃";}
  • 改造就基本完成了。
  • 另外有人提意改写unpublish命令,顺便写一下。
  • unpublish在controllers/registry/package/remove.js里加入
var blackListService = require("../../../services/black_list");...yield blackListService.addBlackList(name);debug("add blacklist");return yield next;

【cnpm】cnpm私有部署改造黑名单梳理相关推荐

  1. 私有部署、重构企业软件,第四范式发布大模型“式说”

    大模型领域再添重要一员! 4月26日,第四范式首次向公众展示其大模型产品「式说3.0」,并首次提出AIGS战略(AI-Generated Software):以生成式AI重构企业软件.式说将定位为基于 ...

  2. Gitea:私有部署Git托管服务(私有Git仓)

    目录 git和Gitea简介 服务端部署 部署环境概览 创建操作系统用户 下载并解压 修改初始配置 git和Gitea简介 git 是一个开源的分布式版本控制系统,用途类使用SVN的版本控制和多人协同 ...

  3. 推荐一个开源的任务管理工具DooTask(支持私有部署)

    原文出处:https://www.yundashi168.com/382.html 今天老逛推荐一个开源的任务管理工具DooTask,该工具会提供各类文档协作功能.在线思维导图.在线流程图.项目管理. ...

  4. 从私有云到云的私有部署,重新定义后云时代的企业IT

    自从2006年AWS推出第一代公有云以来,经过12年的发展,到2018年开始进入后云时代.所谓后云时代,就是以公有云为代表的云技术堆栈已经成熟,技术架构逐渐达成产业共识,市场形成几大技术厂商主导市场的 ...

  5. 云运维管家服务器,行云管家云管平台私有部署标准版安装与体验

    行云管家云管平台 作为业界领先的多云管理平台,行云管家提供针对多家云厂商.多种云资源的一站式管理解决方案,帮助客户:易上云.用好云.管好云 行云管家内置堡垒机模块,从功能上来说,它是传统堡垒机的功能超 ...

  6. 动漫APP软件开发源码私有部署

    动漫APP开发,动漫软件开发源码私有部署.伴随着动漫内容的不断完善,一些具备戏剧化.剧院化的动漫作品一样获得了众多女士用户的亲睐.那么假如说那样的一种方式深受销售市场关注,也会促使动漫APP软件开发更 ...

  7. 如何搭建私有部署企业网盘

    目前市面上企业网盘有很多,但是大多价格较高,在这里我推荐一款最具性价比的悦库网盘搭建方式. 首先去悦库网盘官网,找到网盘下载页面,既然是私有部署,肯定要有服务端和客户端,悦库网盘的服务端同时支持Win ...

  8. Wiznote为知笔记私有部署(docker)删除多余用户账号.md

    删除思路 由于私有部署的为知笔记管理后台没有删除用户选项,可找到mysql数据库,登录后找到对应的库.表.字段来删除用户. 获取数据库登录密码 首先进入wiznote的docker容器终端命令模式,c ...

  9. 一款免费、可私有部署的企业网盘

    私有化部署.数据防泄密.信息共享.文件备份.移动办公.存储安全 产品背景 1.资料分散.文件汇总不方便,缺乏统一管理平台. 2.文件丢失风险高,被竞争对手窃取,人员流动性大造成文件流失,重要文件数据易 ...

最新文章

  1. 基于Python——实现远程下载sftp文件(只下载.zip文件)
  2. windows和linux-JDK环境变量设置
  3. 【数据结构与算法】之深入解析“股票的最大利润”的求解思路与算法示例
  4. [html] 页面上如何显示特殊字符?
  5. python 3.9特性,开发者应该知道的Python 3.9新特性
  6. IOS的UIPickerView 和UIDatePicker
  7. Javascript 中的变量作用域问题
  8. 小熊派开发板移植emwin_小熊派开发实践丨小熊派+合宙Cat.1接入云服务器
  9. centos镜像 from_Docker 基于 CentOS 基础镜像开发环境的搭建与部署
  10. 【码云周刊第 8 期】面试之前,或许该高效率地学点干货了!
  11. 中国金融出版社出版的2016版《综合》
  12. 最小的浏览器-橘子浏览器才1M大小
  13. TeeChart Pro VCL,提供高性能图表
  14. Linux之Python代码打包工具Nuitka使用说明
  15. 轻量级目标检测算法整理
  16. qml 中英文虚拟键盘
  17. 云开发电商小程序实战教程-篇首语
  18. 资源收藏:扁平化风格的图标
  19. micropython移植stm32f746_STM32L476和STM32F746的外部Flash复制文件速度对比
  20. 币圈的8大女神都是谁?-千氪

热门文章

  1. CNN卷积神经网络学习过程(权值更新)
  2. 如何编制项目进度计划
  3. axios 拦截器分析
  4. axios拦截器封装
  5. 如何使用Colormaps和自定义自己喜欢的colorbar?
  6. jquery发送ajax请求_复习之Vue用axios发送ajax请求
  7. python制作热力图_Python中绘制场景热力图
  8. 第十二课 从宠物商店案例看DAPP架构和WEB3.JS交互接口
  9. 生信知识与软件小结:BWA、wtdbg
  10. latex(构建在pdflatex模式下)设置times new roman新罗马字体