前言

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

路由梳理

  • 下载包实际上是先查询,查到后走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. 区块链还能赚钱吗 区块链挖矿赚钱吗
  2. 蚂蚁金服自研分布式关系数据库OceanBase上线阿里云
  3. C# 连接 Sqlserver2005 Analysis Service的总结
  4. 【C语言函数】 - 库函数、自定义函数、函数参数、函数调用、嵌套调用链式访问、递归与迭代、缓冲区
  5. 日期上午下午怎么用date存_Java12都要出来了,你还在使用Date操作日期吗?
  6. python 通用数据库类型_Python开发基础之Python常用的数据类型
  7. Windows Server 2003群集配置手记(转载)
  8. 双边滤波及其matlab代码
  9. C# 2.0泛型编程基础(1)
  10. 闪电html编辑器,闪电pdf编辑器
  11. 自由手写体字帖pdf_何某手写体:一款随心所欲充满趣味的日系手写字体 免费商用...
  12. oracle 中dummy,layout设计中dummy的作用详解(上图。好贴好贴,讲的很仔细)
  13. Thinkpad部分机型支持的智能感知功能介绍
  14. 纵享丝滑滑动切换的周月日历,水滴效果,可高度定制,仿小米日历
  15. 微命令、微操作、微指令、微程序
  16. matlab草稿本,解读草稿本——这个学具,你可千万不能忽视
  17. 实体门店一定要做私域运营吗?哪些行业适合做私域流量运营?
  18. C#--throw的几种抛异常方式及区别
  19. Linux一:Linux启动及登陆
  20. HID Global赢得爱尔兰护照合同

热门文章

  1. 模拟linux设备按键工具,linux下如何模拟按键输入和模拟鼠标
  2. 腾讯视频全网清晰度提升攻坚战
  3. 【2022版】Dubbo面试题整理(含答案解析)
  4. 模拟计算MS软件常见问题及解答(一)
  5. 大数据基础(hadoop环境搭建及使用)
  6. Python——对区间进行等间距取数
  7. can总线程序讲解_详解stm32的CAN控制器(程序分享)
  8. Python数据可视化的例子——散点图(scatter)
  9. 数据结构:二叉树层序遍历和判断是否为完全二叉树
  10. php判断小数点的长度_PHP怎么判断获得的数是否为小数