非常喜欢用vuejs,但又不想花时间去搞nodejs和webpack之类的,所以才有了BeetleX.FastHttpApi.VueExtend这样一个组件;组件的主要功能就是可以实现在vs.net中编写*.vue并直接引用到服务中,这样对于我这个习惯在vs.net写服务应的带来极大的方便性。
BeetleX的web项目结构
以上是Beetlex网关的管理插件,通过BeetleX.FastHttpApi.VueExtend插件只需要在项目的views->vue目录下编写相关的.vue文件即可以。当然这个vue的内容和平时在webpack中编写的有些差别,不过会相对简单一些:
<div class="admin-page-title"><h1><a href="http://beetlex.io" target="_blank"> Beetlex.io</a></h1><div class="page-menu"><a href="javascript:void(0)" :class="[active=='admin_home'?'active':'']" @click="onChange('admin_home')">主页</a><a href="javascript:void(0)" :class="[active=='admin_actions'?'active':'']" @click="onChange('admin_actions')">控制器管理</a><a href="javascript:void(0)" :class="[active=='admin_urlrewrite'?'active':'']" @click="onChange('admin_urlrewrite')">URL重写配置</a><a href="javascript:void(0)" :class="[active=='admin_folder'?'active':'']" @click="onChange('admin_folder')">虚拟目录</a><a href="javascript:void(0)" :class="[active=='admin_log'?'active':'']" @click="onChange('admin_log')">日志</a><a href="javascript:void(0)" :class="[active=='admin_setting'?'active':'']" @click="onChange('admin_setting')">配置</a><a href="http://beetlex.io" target="_blank">关于</a><a href="javascript:void(0)" :class="[active=='admin_login'?'active':'']" @click="onSignout">退出</a></div>
</div>
<script>{data(){return {active: 'admin_home',signout: new beetlexAction('/admin/Signout'),}},methods: {onChange(model){this.selected = model;this.$emit('change', model);},onSignout(){this.signout.asyncget().then(r => {page.OnSignout();});}},watch: {selected(val){this.active = val;},},props: ['selected']}
</script>
使用上相对会变得更简单,只定义一个vue的结构体,对应的import引入是不需要的,BeetleX.FastHttpApi.VueExtend插件最终会把这些文件生成并输出一个js文件。
插件使用
由于BeetleX.FastHttpApi.VueExtend是针对BeetleX.FastHttpApi而设计的,所以只能用到Beetlex的项目。
使用之前要到
https://www.nuget.org/packages/BeetleX.FastHttpApi.VueExtend/引用最新版本。引用这后只需要针对HttpApiServer调用Vue()创建相关资源引用即可
HttpApiServer.Vue().Debug();
HttpApiServe.Vue().AddScript(typeof(Program).Assembly,"vue.js", "axios.js", "beetlex4axios.js", "element.js", "autobase.js", "echarts.js");
debug:方法主要是用于把解释目录指向当前项目的views目录,这样就可以修相关VUE文件的时候无法编译即可刷新最新的结果。这个方法是基于[Conditional("DEBUG")],所以当编译发布后就无效。
AddScript:方法主要用于添加固定的公共js文件,这些文件在生成后会被放在生成js文件的最顶部分。
页面引用
BeetleX.FastHttpApi.VueExtend只负责vue生成最终js,需要自己建个控制器来进行页面引用输出:
public object GetScript(IHttpContext context)
{return context.Server.Vue().Response(context);
}
html页面引用
<script src="GetScript"></script>
组件会根据生成的js大小进行一个自动的gzip输出,无须开发人员自行处理。除了自动gzip外组件还引入了If-None-Match头来标记内容的变更情况,如果输出的内容没发生变化组件自动响应304。
实际应用效果
现有BeetleX相关web插件都是使用这种方式来进行插件UI开发,对于只想用vs.net同时处理服务和前端工作的人来算是非常方便;这样可以把前端和服务端都集成在一个项目中,也不用考虑跨域调试的问题。以下是使用BeetleX.FastHttpApi.VueExtend开发两个插件的效果
BeetleX
开源跨平台通讯框架(支持TLS)
轻松实现高性能:tcp、http、websocket、redis、rpc和网关等服务应用
https://beetlex.io