一站式Web开发套件BeetleX.WebFamily

摘要:
对于JWT的使用,您可以查看BeetleX的web api验证插件JWT集成数据库访问。WebFamily默认集成EFCore作为数据库访问组件,可以通过以下代码将其添加到数据库中。BettleX.EFCore.Extension Redis访问的SQL对象详细信息通常需要缓存作为高度并发服务中并发的支持点。默认情况下,BettleX.WebFamily集成BettleX.Redis作为其内置缓存服务。
 

        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文件。

一站式Web开发套件BeetleX.WebFamily第3张

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

一站式Web开发套件BeetleX.WebFamily第4张

 一站式Web开发套件BeetleX.WebFamily第5张

这样迈出了使用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方法进行注册控制器,该方法在注册这个类的同时也把相关程序集中所有控制器也注册完成;注册完成即可访问这个方法.

一站式Web开发套件BeetleX.WebFamily第10张

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错误。

一站式Web开发套件BeetleX.WebFamily第13张

 如果希望某些控制器或方法有接受验证处理,可以通过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来处理。

一站式Web开发套件BeetleX.WebFamily第18张

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;
}
复制代码

一站式Web开发套件BeetleX.WebFamily第25张

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="http://t.zoukankan.com/css/beetlex.css" rel="stylesheet" />
    <script src="http://t.zoukankan.com/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="http://t.zoukankan.com/css/beetlex.css" rel="stylesheet" />
<script src="http://t.zoukankan.com/js/beetlex.js"></script>

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

一站式Web开发套件BeetleX.WebFamily第30张

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>
复制代码

 一站式Web开发套件BeetleX.WebFamily第35张

使用element控件

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

复制代码
<div>
    <el-table :data="getCustomers.result"
                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组件.

一站式Web开发套件BeetleX.WebFamily第40张

免责声明:文章转载自《一站式Web开发套件BeetleX.WebFamily》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python脚本之日期格式显示SCI正刊和特刊(专刊/增刊)的区别是什么?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Sharding-jdbc 读写分离(三)- springboot+mybatis+Hikari

概念 在上一篇文章介绍了如何使用Sharing-JDBC实现数据库的分表分库。这章节将介绍读写分离,读写分离的好处就是在并发量比较大的情况下,将查询数据库的压力 分担到多个从库中,能够满足高并发的要求。比如上一篇实现的那样,架构图如下: 代码 sharding.jdbc.datasource.names=db0,db1 # 数据源db0 sharding...

Delphi笔记数据库开发

Delphi笔记-数据库开发  数据集的每一列被称为一个字段,每一行被称为一个记录。 •数据集:是一个分立的数据记录的集合。数据集由VCL的TDataSet表示。 •表:一种特殊类型的数据集。表一般是一个实际存储在磁盘上、包含有数据记录的文件。VCL的TTable类中封装了它的各种功能。 •查询:也是一种特殊类型的数据集。它可以被看作是执行了特殊命令后所产...

C#导出WORD

一、操作Word    首先引用这个DLL,Microsoft.Office.Interop.Word,官方提供的。   可以操作word文字,表格,图片等。   文字通过替换关键字的方式实现   document.Paragraphs[i].Range.Text = temptext.Replace("{$village}", "HELLO WORLD"...

Zabbix优化

参考 zabbix默认的配置即使机器128核心,256内存,只能抗住10-20台的监控,如果再多就需要修改配置了。 一.配置文件 server端配置文件添加如下 StartPollers=160 StartPollersUnreacheable=80 StartTrappers=20 StartPingers=100 StartDiscovere...

SQL语句的三大类

数据定义语言(DDL Data Defination Language):用于创建和定义数据库对象,并且将对这些对象的定义保存到数据库字典中,通过DDL语句可以创建数据库对象、修改数据库对象、删除数据库对象等。 数据控制语言(DCL Data Control Language):用于修改数据库结构的操作权限。 数据操纵语言(DML Data Manipul...

React Native for Web配置

更多内容参见个人技术博客,无广告欢迎关注React Native for Web配置兼容性:React Native 0.55。 “React Native for Web”使得可以使用React DOM在Web上运行React Native组件和API。查看在Web上运行的React Native示例的实时演示。 高质量的Web界面:可以轻松地在Jav...