
Product
Introducing Module Reachability: Focus on the Vulnerabilities That Matter
Module Reachability filters out unreachable CVEs so you can focus on vulnerabilities that actually matter to your application.
bpframework
Advanced tools
This project is still in development
use cli to create a project.
npm i bpframework-cli -g
create a project.
bpframework init
see directory ./examples
feature | supports |
---|---|
config | bootstrap.yml SpringCloudConfig |
discovery | nacos |
scheduling | @Scheduled |
api routers | @RestController |
The appropriate configuration is required to enable the corresponding feature: config
name | description |
---|---|
FindMicroserviceConfigure | 定义自定义的服务发现处理方法 |
FeignClientConfigure | 定义FeignClient的默认headers等信息 |
RestControllerConfigure | 定义RestController的默认headers等信息 |
By default, nacos is used to find micro-service; You can customize it by @FindMicroserviceConfigure
.
@Service()
class Configure {
@FindMicroserviceConfigure
async onFindMicroservice(serviceName: string, excludeHost: string): Promise<ServiceInfo> {
return {
ip,
port,
serviceName,
metadata,
}
}
}
定义RestController的默认headers等信息, 使用如下方式.
@Service()
class Configure {
@RestControllerConfigure
onConfigure(): bp.RestControllerConfigureInfo {
return {
defaultHeaders: {'content-type': 'application/json;charset=utf-8'},
}
}
}
用于忽略rest请求的日志, 使用如下方式.
@RestController({ path: '/api' })
class Rest {
@IgnoreRestLogger
@RequestMapping({ path: '/url', method: RequestMethod.GET })
async request(
@RestObject obj: RestObjectTypeRest<koa.Context> // or RestObjectType
): Promise<ListRolesRequest> {
...
}
}
用于判断rest请求是否执行
type RequestMatchFunction = (restObjec: RestObjectType<any> | RestObjectTypeFeign<any>) => Promise<boolean>;
/**
* @desc 当match函数返回false时,不继续执行请求.
*
* @returns {MethodDecorator}
*/
export function RequestConditional(match: RequestMatchFunction): MethodDecorator;
实例
@RestController({ path: '/api' })
class Rest {
@RequestConditional(async (restObject:RestObjectType<any>):Promise<boolean> => {
return false;
})
@RequestMapping({ path: '/url', method: RequestMethod.GET })
async request(
@RestObject obj: RestObjectTypeRest<koa.Context> // or RestObjectType
): Promise<ListRolesRequest> {
// 将不执行.
}
}
定义FeignClient的默认headers等信息, 使用如下方式.
@Service()
class Configure {
@FeignClientConfigure
onConfigure(): bp.FeignClientConfigureInfo {
return {
defaultHeaders: {'content-type': 'application/json;charset=utf-8'},
/**
* 对每次请求后接收的消息进行过滤.
*/
filterResponseCallback: (data: FeignClientFilterResponseData) => {
},
/**
* Processing the data of the request.
*/
filterRequestCallback: (data: FeignClientFilterRequestData, feignData: FeignDataType) => {
}
}
}
}
使用 @Value 注解设置初始值或获取配置值.
@Service()
class Demo {
@Value("Miss A")
teacher1Name: string; // will set to 'Miss A'
@Value("${teacherName2}")
teacher2Name: string; // will set to config value "teacherName2"
@Value("${teacherName3:defaultName}")
teacher3Name: string; // will set to 'defaultName' if config value "teacherName3" isn't existed.
}
see https://github.com/bpcloud/middleware.git
name | description |
---|---|
ContextRefreshedEventListener | 本地配置加载完成, 系统service对象初始化完成 |
RefreshRemoteEventListener | 远程配置动态刷新事件 |
InstanceRegisteredEventListener | 实例注册到注册中心后的事件 |
本地配置加载完成, 系统service对象初始化完成.
@Service()
class ApplicationEvent {
@ContextRefreshedEventListener
async onContextRefreshed(ev:ContextRefreshedEvent):void {
}
}
远程配置动态刷新事件.
@Service()
class ApplicationEvent {
@RefreshRemoteEventListener
async onRefreshRemote(ev:RefreshRemoteEvent):void {
}
}
实例注册到注册中心后的事件.
@Service()
class ApplicationEvent {
@InstanceRegisteredEventListener
async onInstanceRegistered(ev:InstanceRegisteredEvent):void {
}
}
全局启动scheduled
global.__enableScheduled = true;
使用此注解可以开启一个定时任务.
@Service()
class Demo {
@Scheduled({cron:'* * * * * *'})
async onTick(): Promise<false|void> {
return false; // 返回false则表明停止此task.
}
}
可以使用此注解实例化对象
/**
* 加载所有的bean, 并进行实例化等操作.
*/
export function finishBeans(): Promise<void>;
/**
* @desc 获得已装配完的指定类型的service.
*/
export function getServiceInstances(key: any): ServiceInstanceType;
/**
* 无需等待执行 finishBeans().
*
* @returns {ClassDecorator}
*/
export function ImmediatelyService(name: string): ClassDecorator;
export function ImmediatelyService(cfg?: { singleton?: boolean, name?: string }): ClassDecorator;
/**
* @desc 表明指定的类为Service类.
*
* 定义为Service的类, 在源文件被引用后, 单例bean将会自动在全局创建一个实例.
*
* @description
* `Service` 与 `Bean` 都是延迟注入类型; 需要在 `finishBeans()` 方法调用之后才能够生效.
* 需实现立即生效类型使用 `ImmediatelyService`
*
* @param cfg.singleton 是否为单例; (默认单例)
* @param cfg.name 使用名称注入; 如不使用名称,则使用类型注入.
*
* @returns {ClassDecorator}
*/
export function Service(name: string): ClassDecorator;
export function Service(cfg?: { singleton?: boolean, name?: string }): ClassDecorator;
示例:
/**
* 在app初始化完成后将自动实例化.
*/
@Service()
class Example {
constructor() {}
}
/**
* 立即自动实例化.
*/
@ImmediatelyService()
class Example {
constructor() {}
}
/**
* @desc 表明指定的属性为Bean.
*
* <Bean修饰的方法不允许带参数, 并且返回的类型作为注入对象的类型.>
* 定义为Bean, 在源文件被引用后, 单例bean将会自动在全局创建一个实例.
*
* @description
* `Service` 与 `Bean` 都是延迟注入类型; 需要在 `finishBeans()` 方法调用之后才能够生效.
* 需实现立即生效类型使用 `ImmediatelyService`
*
* @param cfg.singleton 是否为单例; (默认单例)
* @param cfg.name 使用名称注入; 如不使用名称,则使用方法名注入.
*
* @example
*
* ﹫Service()
* class {
* ﹫Bean()
* foo(): Object {
* return {};
* }
*
* ﹫Autowired('foo')
* private obj: Object;
* }
* @returns {PropertyDecorator}
*/
export function Bean(name: string): MethodDecorator;
export function Bean(cfg?: { singleton?: boolean, name?: string }): MethodDecorator;
/**
* @desc 表明指定的属性可以自动装载指定的Service实例.
*
* @example
* ﹫Autowired(ClassA)
* obj: ClassA; // will to auto create object.
*
* @returns {PropertyDecorator}
*/
export function Autowired(type: Function|string): PropertyDecorator;
/**
* @desc 表明指定的属性可以自动装载指定的值.
* @description 无需添加 RefreshScope 注解; 在配置刷新时会自动变更值.
* @example
* ﹫Service()
* class Demo {
* ﹫Value("Miss A")
* teacher1Name: string; // will set to 'Miss A'
*
* ﹫Value("${teacherName2}")
* teacher2Name: string; // will set to config value "teacherName2"
*
* ﹫Value("${teacherName3:defaultName}")
* teacher3Name: string; // will set to 'defaultName' if config value "teacherName3" isn't existed.
* }
*
* @returns {PropertyDecorator}
*/
export function Value(value: any): PropertyDecorator;
FAQs
Web framework like java springboot and springcloud
The npm package bpframework receives a total of 44 weekly downloads. As such, bpframework popularity was classified as not popular.
We found that bpframework demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Module Reachability filters out unreachable CVEs so you can focus on vulnerabilities that actually matter to your application.
Company News
Socket is bringing best-in-class reachability analysis into the platform — cutting false positives, accelerating triage, and cementing our place as the leader in software supply chain security.
Product
Socket is introducing a new way to organize repositories and apply repository-specific security policies.