一站式Web开发套件BeetleX.WebFamily

        BeetleX.WebFamily是一款前后端分离的Web开发套件,但它并不依赖于nodejs/npm/webpack等相关工具;而使用自身实现的方式来完成前后端分离的Web应用开发;套件以组件的方式发布,只需要在项目引用相关组件即可实现前后端分离开发,开发出来的项目可直接部署在装用.NetCore的Linux和Windows系统上。

        BeetleX.WebFamily整合了前后端两方面的应用技术;后端使用BeetlX.FastHttpApi作为基础服务支持http/https/ws/wss服务,集成了JWT验证方案可以实现相关服务安全性调用;在数据库访问上集成了EFCore组件,外置缓冲上集成了BeetleX.Redis。前端则使用了Vue,默认集成了ElementUI作为基UI库;在Ajax上集成了axios库,为了方便和BeetleX通讯同样集成了基于axios扩展的BeetleXjs实现无缝兼容http/ws的控制器调用。

创建服务

        首先需要创建一个控制台项目(winform也可以,作为服务的宿主),创建项目后引用BeetleX.WebFamily组件,并在Main函数定义以下代码.

    WebHost host = new WebHost();host.Setting(o =>{o.SetDebug();o.Port = 80;o.LogLevel = EventArgs.LogType.Info;o.LogToConsole = true;}).Run();

以上是在80上启用一个http/websocket服务,接下来在项目中增加一个views目录,然后添加index.html文件。

接下来就可以运行它并用浏览器访问它了。

这样迈出了使用BeetleX.WebFamily编写web应用的第一步,接下来就是WebApi,EFCore和VUE等相关的使用。

API编写

        BeetleX.WebFamily的服务由BeetleX.FastHttpApi提供,在编写Webappi需要定义相关的控制器.

    [Controller]public class WebApiController{public object Hello(){return DateTime.Now;}}

以上是一个简单的Hello方法,访问路径是/Hello.在服务启动的时候需要注册一下它。

WebHost host = new WebHost();
host.RegisterController<WebApiController>()
.Setting(o =>
{o.SetDebug();o.Port = 80;o.LogLevel = EventArgs.LogType.Info;o.LogToConsole = true;
})
.Run();

通过WebHost.RegisterController方法进行注册控制器,该方法在注册这个类的同时也把相关程序集中所有控制器也注册完成;注册完成即可访问这个方法.

JWT验证

        组件默认是开始JWT验证处理,在这情况所有接口的访问都是没有限制的;可以以下方式开启JWT

WebHost host = new WebHost();
host.RegisterController<WebApiController>()
.Setting(o =>
{o.SetDebug();o.Port = 80;o.LogLevel = EventArgs.LogType.Info;o.LogToConsole = true;
})
.UseJWT()
.Run();

开启了JWT后,所有方法在没有凭证的情况都会返回401错误。

如果希望某些控制器或方法有接受验证处理,可以通过AuthMark来实现

    [Controller][AuthMark(AuthMarkType.NoValidation)]public class WebApiController{public object Hello(){return DateTime.Now;}}

以上标记WebApiController的所有方法不用验证即可访问。针对JWT的使用可以查看BeetleX之webapi验证插件JWT集成

数据库访问

        BeetleX.WebFamily默认集成EFCore作为数据库访问组件,可以通过以下代码加入数据库。

static void Main(string[] args)
{WebHost host = new WebHost();host.RegisterController<WebApiController>().Setting(o =>{o.SetDebug();o.Port = 80;o.LogLevel = EventArgs.LogType.Info;o.LogToConsole = true;}).UseJWT().UseEFCore<NorthwindContext>().Run();
}

以上是引用了NorthwindContext数据库,实际可以根据需要来引用多个数据库。当开启了数据库后,控制器方法即可定义相关数据库对象来进行数据库访问。

public DBObjectList<Customer> Customers(EFCoreDB<NorthwindContext> db)
{return (db.DBContext, "select * from customers");
}

可以通过EFCoreDB<T>来引用数据库,由于组件需要管控相关参数的一些生合周期和信息所以无法直接用DBContext来处理。

BeetleX.EFCore.Extension之SQL对象详解

Redis访问

        在高并发服务中往往需要缓存作为其并发的支撑点,BeetleX.WebFamily默认集成了BeetleX.Redis作为其内置的缓存服务。可以通过以下方法开启Redis访问,首先定义一个对应需求的Redis对象

    public class NorthwindRedis : RedisDB{public NorthwindRedis() : base(0, new JsonFormater()){}}

接下来就可以在WebHost中使用它

WebHost host = new WebHost();
host.RegisterController<WebApiController>()
.Setting(o =>
{o.SetDebug();o.Port = 80;o.LogLevel = EventArgs.LogType.Info;o.LogToConsole = true;
})
.UseJWT()
.UseEFCore<NorthwindContext>()
.UseRedis<NorthwindRedis>(redis =>{var host = redis.Host.AddWriteHost("127.0.0.1");host.MaxConnections = 50;})
.Run();

给相关Redis库添加一个可写的服务地址,然后设置最大连接数是50。开启后就可以在控制器中方法定义相关参数了。

public async Task SetRedis(EFCoreDB<NorthwindContext> db, NorthwindRedis redis)
{var item = await db.DBContext.Customers.FirstAsync();await redis.Set(item.CustomerID, item);
}public async Task<Customer> GetRedis(NorthwindRedis redis)
{var item = await redis.Get<Customer>("ALFKI");return item;
}

Vue使用

        在BeetleX.WebFamily的支持上无须使用nodejs/npm/webpack等相关工具即可编写Vue模块;组件默认嵌入了Vue,axios和element包,所以在开发过程中无须导入,如果需要其他则需要自行导入。为了方便修改刷后即得结果需要在服务启动时添加以下代码

WebHost host = new WebHost();
host.RegisterController<WebApiController>()
.Setting(o =>
{o.SetDebug();o.Port = 80;o.LogLevel = EventArgs.LogType.Info;o.LogToConsole = true;
})
.UseJWT()
.UseEFCore<NorthwindContext>()
.UseRedis<NorthwindRedis>(redis =>
{var host = redis.Host.AddWriteHost("127.0.0.1");host.MaxConnections = 50;
})
.Initialize(s =>
{//添加第三方css和javascript文件//s.GetWebFamily().AddCss("site.css");//s.GetWebFamily().Addscript("xxx.js");s.Vue().Debug();
}).Run();

通过Initialize方法里设置一下Vue.Debug(),这样确保程序在运行时修改模块文件也可以即时刷新查看。

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="utf-8" /><title>BeetleX.WebFamily</title><link href="/css/beetlex.css" rel="stylesheet" /><script src="/js/beetlex.js"></script>
</head>
<body><div id="app"><h1></h1></div><script>var page = new Vue({el: '#app',data: {title: 'BeetleX.WebFamily Vue',}});
</script>
</body>
</html>

在这里需要注意的是css和javascript引用,引用方式是固定的

<link href="/css/beetlex.css" rel="stylesheet" />
<script src="/js/beetlex.js"></script>

组件打包的css和 javascript通过这两个路径输出。

Vue组件

        作为一个模块化设计理念的组件,在实际应用更多是单页面集成模块为主;组件支持组件编写,编写方式和传统es6下有所不同,以下是mypanel.vue模块

<h1>{{title}}
</h1>
<script>{data(){return { title: 'BeetleX.WebFamily Vue module' }}}
</script>

其编写方法主要是以vuejs为主,组件分为两大块一块是html模块,另一块是则是以script的方式描述Vue组件信息。在index.html中引用组件:

<body><div id="app"><mypanel></mypanel></div><script>var page = new Vue({el: '#app',data: {}});
</script>
</body>

使用element控件

        组件集成了ElementUI可以直接在组件中使用相关组件。下面实现一个customers.vue来显示客户信息。

<div><el-table :data="getCustomers.result"style="width: 100%" size="mini"><el-table-column prop="CustomerID"label="CustomerID"width="180"></el-table-column><el-table-column prop="CompanyName"label="CompanyName"width="180"></el-table-column><el-table-column prop="ContactName"label="ContactName"></el-table-column><el-table-column prop="ContactTitle"label="ContactTitle"></el-table-column><el-table-column prop="Country"label="Country"></el-table-column><el-table-column prop="Address"label="Address"></el-table-column></el-table>
</div>
<script>{data(){return {getCustomers: new beetlexAction("/Customers", null, []),};},methods: {},mounted(){this.getCustomers.get();}}
</script>

在这里并没有使用axios进行数据请求,而是使用在它基础上封装的beetlexjs功能。通过beetlexAction来定义一个请求,并在el-table上直接绑定对应的result对象。

<body><div id="app"><customers></customers></div><script>var page = new Vue({el: '#app',data: {}});
</script>
</body>

更改一下页面引用customer组件.

下载

链接:https://pan.baidu.com/s/18VEArcgZSJw_COHzesK-6w 

提取码:g4kk 

【BeetleX通讯框架代码详解】
【WebApi示例扩展】
BeetleX

开源跨平台通讯框架(支持TLS)
轻松实现高性能:tcp、http、websocket、redis、rpc和网关等服务应用

https://beetlex.io

如果你想了解某方面的知识或文章可以把想法发送到

henryfan@msn.com|admin@beetlex.io

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET架构小技巧(2)——访问修饰符正确姿势

在C#中&#xff0c;访问修饰符是使用频率很高的一组关键字&#xff0c;一共四个单词六个组合&#xff1a;public,internal,protected internal,protected,private protected,private&#xff0c;如果你对这些关键字非常清楚&#xff0c;请跳过&#xff0c;节省时间&#xff1b;…

能源36号文解读_IDC报告预测:今年中国新能源汽车销量将达116万辆,未来五年复合增长率36%_详细解读_最新资讯_热点事件...

编者按&#xff1a;本文来自36氪「 未来汽车日报」&#xff0c;(微信公众号ID&#xff1a;auto-time)&#xff0c;作者&#xff1a;秦章勇。 来源&#xff1a;IDC作者 | 秦章勇编辑 | 周游12月3日&#xff0c;在2020世界智能汽车大会上&#xff0c;IDG亚洲(国际数据(亚洲)集团)…

后端学习 - 容器

文章目录一 简介二 底层数据结构总结1 List2 Set3 Queue4 Map三 Collection 的子接口 List1 ArrayList 与 Vector2 ArrayList 与 LinkedList3 ArrayList 的 JDK 7/8 差异4 ArrayList 的构造方法与扩容机制*四 Collection 的子接口 Set1 HashSet、LinkedHashSet 和 TreeSet2 Has…

简单聊聊AspNetCore的启动流程

首先&#xff0c;得和大家达成一个共识&#xff0c;即AspNetCore项目其实就是一个控制台项目。可以简单的理解&#xff0c;AspNetCore就是将一个Web服务器宿主在一个进程(即控制台)中&#xff0c;然后它在这个进程中进行http请求的监听处理。AspNetCore中默认使用kestrel作为we…

共聚焦图片怎么加标尺_聚焦扶贫政策,打造小康生活

导语&#xff1a;农村独栋小楼、整洁的水泥路……扶贫产业蓬勃发展&#xff0c;我省结合实际&#xff0c;狠抓特色产业&#xff0c;助力脱贫攻坚&#xff0c;实现乡村振兴。武宁县&#xff1a;“四个聚焦”巩固脱贫成果2020年是全面建成小康社会目标实现之年&#xff0c;是全面…

后端学习 - 并发编程

文章目录零 基本概念1 CAS、ABA 问题和原子变量2 this 引用逸出3 不变性 immutable4 同步、异步、阻塞、非阻塞5 JMM6 同步方案演示&#xff1a;计数器 demo*一 进程与线程1 区别与联系2 Java内存区域3 线程组4 线程的上下文切换5 并发与并行6 线程的生命周期与状态二 线程间的…

打造跨平台.NET Core后台服务

续之前讲的在TopShelf上部署ASP.NET Core程序&#xff0c;作为后台服务运行&#xff0c;自从.NET Core 3.0出现以后&#xff0c;出现了自带的Generic Host&#xff0c;使得自托管服务变为可能。这种方式和TopShelf方式一样&#xff0c;可以直接F5进行服务的调试&#xff0c;也为…

iphone桌面横屏设置在哪里_我和我各司其职的桌面们

作者&#xff1a;旭彦兮沐桌面是只属于我们自己一个人的舞台&#xff0c;是与我们独处的好伙伴。好好布置一下自己的桌面&#xff0c;能在很大程度上保持我们心情的愉悦和做事情的效率&#xff0c;让我们保持专注当下的沉浸感。我最早了解到「桌面文化」其实是很早之前了&#…

后端学习 - RabbitMQ

文章目录一 MQ 的作用与基本概念1 流量削峰2 应用解耦3 异步调用4 四个基本概念二 核心模式1 工作队列模式&#xff08;Work Queue&#xff09;2 发布/订阅模式&#xff08;Publish / Subscribe&#xff09;3 路由模式&#xff08;Routing&#xff09;4 主题模式&#xff08;To…

dubbo k8s 服务发现_工商银行基于 Dubbo 构建金融微服务架构的实践-服务发现篇

简介&#xff1a; Dubbo 作为分布式微服务框架&#xff0c;众多公司在实践中基于 Dubbo 进行分布式系统架构。重启开源后&#xff0c;我们不仅看到 Dubbo 3.0 最新的 Roadmap 发布&#xff0c;而且还看到阿里在自身电商开始推进 Dubbo 和内部 HSF 的融合&#xff0c;并在 双11 …

初识ABP vNext(12):模块的独立运行与托管

点击上方蓝字"小黑在哪里"关注我吧模块运行动态 C# API 客户端前言很久没更新这个系列。。。之前的章节中讲到ABP的模块是可以独立运行的&#xff0c;但是没有介绍具体怎么操作&#xff0c;本篇就来讨论一下模块如何独立运行&#xff0c;以及一些托管方式。本人也是处…

后端学习 - Spring5

文章目录一 简介二 IOC1 底层原理2 实现过程3 Spring 实现 IOC 的两个接口二 Bean1 普通 Bean 与 FactoryBean2 Bean 单例与否的设置3 Bean 的生命周期三 IOC 的 Bean 管理&#xff08;XML&#xff09;1 创建对象2 属性注入 - 使用 set 方法3 属性注入 - 通过有参构造器实现3 注…

吐槽一下Abp的用户和租户管理模块

1. 背景ASP.NET Core 基于声明的访问控制到底是什么鬼&#xff1f;聊到基于声明的身份认证将 身份和签发机构分离&#xff0c;应用程序信任签发机构&#xff0c;故认可签发的身份信息。-----------ClaimB站:438962688 Name:饭思思_weibo:538210234 Name:饭思思van姓名:不详 籍贯…

后端学习 - JDBC

文章目录一 JDBC概述1 Java中的数据存储技术2 什么是JDBC3 JDBC程序的编写步骤二 Java连接数据库的方式三 使用 PreparedStatement 实现 CRUD 操作1 数据库的调用的三个接口2 增Create/删Delete/改Update 操作3 查Retrieval操作4 批量插入操作四 数据库事务1 事务2 事务的 ACID…

后端学习 - JavaWeb

技术体系 文章目录一 HTML1 网页的组成部分2 HTML 概述3 HTML 标签4 常用标签5 表单与表单的提交二 CSS1 语法格式2 使用方法三 JavaScript1 概述2 与 HTML 结合的两种方式3 变量类型及特殊值4 关系、逻辑运算5 数组6 函数7 事件8 DOM &#xff08;Document Object Model&#…

心想技术驱动业务,却在背道而驰

这里是Z哥的个人公众号每周五11&#xff1a;45 按时送达当然了&#xff0c;也会时不时加个餐&#xff5e;我的第「165」篇原创敬上大家好&#xff0c;我是Z哥。相信每一位真正的程序员心里都有这样一个念想&#xff1a;只要我的技术够牛&#xff0c;就能驱动业务的发展。但是往…

后端学习 - SpringMVC

文章目录一 SpringMVC 简介1 MVC2 SpringMVC3 创建第一个 SpringMVC 项目二 RequestMapping1 注解类与方法的区别2 value 属性3 method 属性4 params 属性5 headers 属性6 SpringMVC 支持路径中的占位符三 获取 Request 的一系列参数1 通过控制器方法的形参2 控制器方法形参 映…

hbase shell远程连接_hbase与phoenix集成

Phoenix是构建在HBase之上的关系型数据库层&#xff0c;作为内嵌的客户端JDBC驱动用以对HBase中的数据进行低延迟访问Phoenix会将用户编写的sql查询编译为一系列的scan操作&#xff0c;最终产生通用的JDBC结果集返回给客户端Phoenix可以看成是mysql准备安装包apache-phoenix-4.…

对精致码农大佬的 [理解 volatile 关键字] 文章结论的思考和寻找真相

一&#xff1a;背景1. 讲故事昨天在园里的编辑头条看到 精致码农大佬 写的一篇题为&#xff1a;[C#.NET 拾遗补漏]10&#xff1a;理解 volatile 关键字 (https://www.cnblogs.com/willick/p/13889006.html) 的文章&#xff0c;大概就是说在 多线程环境下&#xff0c;一个在debu…

后端学习 - SpringBoot

SpringBoot 是整合 Spring 技术栈的一站式框架&#xff0c;是简化 Spring 技术栈的快速开发脚手架约定大于配置 文章目录一 概述1 第一个 SpringBoot 项目2 SpringBoot 特性&#xff1a;依赖管理3 SpringBoot 特性&#xff1a;自动配置二 SpringBoot 的 IOC容器1 组件添加&…