第7章 博客文章的前端渲染显示
创始人
2024-02-24 06:59:17

说实话本人通过Vue页面实现前端对后端数据的渲染显示也是初学咋练,但后端实现本人却是老鸟,对于后端开发者来说如果,渲染显示的软件是浏览器,除非团队中有Vue方面的大拿,不管是PC浏览器还是移动PC浏览器,Razor页面是最好的选择; 如果是通过App或小程序进行渲染显示那么Vue是必需且唯一的选择。

    Vue页面的实现不管是语言还是开发环境当前都于处于急剧迭代的阶段,即它们都还不成熟,1年前的前端项目不能被运行是常态,因此建议最好集成当前最新的开发包,这样也许前端项目的运行兼容周期会长一些,这也是本人建议如果是浏览器就选择Razor页面的主要原因之一。

    由于上述因素在开发开发环境:VSCode与Hbuilder X,的选择是准则是:小孩才作选择,大人全都要;这是向现实认命和妥协,只有在两个者能够明显分出高下的时候,才是开者才能作出最终的选择。

    VSCode:能够获取最新的Vue包,但上手和配置比较麻烦,特别对于App或小程序的uni-app尤其此。

    Hbuilder X:所支持Vue包的最新版本是:3.28,但当前Vue的最新包最新版本是:5.x,但Hbuilder X最大的优点是上手简单,特别对于App或小程序的uni-app开发,除非特别需求,建议还是直接选择Hbuilder X。

    “Blog.Admin-master”前端项目是最终用于浏览器渲染显示的,它的开发环境是“VSCode”,所以本人也会遵循上述要求对“Blog.Admin-master”前端项目进行分解实现,由于本人“VSCode”中所配置的Vue包版本比较高导致原项目不能被正常运行,所以本从前端项项目代码可能与考“Blog.Admin-master”前端项目的代码有些不同敬请谅解。

1 跨域(Cors)异常的后端解决方案

    在当前Vue前端项目中对后端的访问中会异常:“has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.”,如下图所示:

1.1 异常解决方案

1.1.1 定义中间件“CorsMiddleware”

namespace WebApi.Middleware

{

    ///

    /// 【跨域访问中间件】

    ///

    ///

    /// 摘要:

    ///     该管道中间件类主要为了解决在由vue/uni-app前端项目(Cors)访问当前后端项目时,浏览器或App中出现的异常:

    ///    1、“has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.”。

    ///    2、“has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.”。

    ///

    public class CorsMiddleware

    {

        #region 拷贝构造方法

        ///

        /// 【下1个】

        ///

        ///

        /// 摘要:

        ///     .Net(Core)框架内置管道中的下1个管道中间件实例。

        ///

        private readonly RequestDelegate _next;

        ///.Net(Core)框架内置管道中的下1个管道中间件实例。

        ///

        /// 【拷贝构造方法】

        ///

        ///

        /// 摘要:

        ///    通过该构造方法中的参数实例,实例化.Net(Core)框架内置管道中的下1个管道中间件实例。

        ///

        public CorsMiddleware(RequestDelegate next)

        {

            _next = next;

        }

        #endregion

        #region 方法

        ///HTTP上下文实例。

        ///

        /// 【调用】

        ///

        ///

        /// 摘要:

        ///    通过该方法向.Net(Core)框架内置管道中集成当前管道中间件,解决由vue/uni-app前端项目(Cors)访问当前后端项目时,浏览器或App中出现的异常:

        ///    1、“has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.”。

        ///    2、“has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.”。

        ///

        public async Task Invoke(HttpContext context)

        {

            //解决在由Hbuilder创建的前端Xuni-app项目(Cors)访问当前后端项目时,浏览器或App中会出现异常:

            //“has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.”。

            if (!context.Response.Headers.ContainsKey("Access-Control-Allow-Headers"))

            {

                context.Response.Headers.Add("Access-Control-Allow-Headers", "DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization");

            }

            if (!context.Response.Headers.ContainsKey("Access-Control-Allow-Methods"))

            {

                context.Response.Headers.Add("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,PATCH,OPTIONS");

            }

            //解决在由Hbuilder创建的前端Xuni-app项目(Cors)访问当前后端项目时,浏览器或App中会出现异常:

            //“has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.”。

            if (!context.Response.Headers.ContainsKey("Access-Control-Allow-Origin"))

            {

                context.Response.Headers.Add("Access-Control-Allow-Origin", "*");

            }

            await _next(context);

        }

        #endregion

    }

1.1.2 重构 Program类

var app = builder.Build();

//把自定义管道中间中集成到.Net(Core)框架内置管道中,解决vue/uni-app前端项目(Cors)访问当前后端项目时,浏览器或App中出现的异常:

//    1、“has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.”。

//    2、“has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.”。

app.UseMiddleware();

// Configure the HTTP request pipeline.

if (app.Environment.IsDevelopment())

{

    app.UseSwagger();

    app.UseSwaggerUI();

}

app.UseHttpsRedirection();

1.1.3 启动程序

    .net框架可以在不经过部署,直接在执行的情况下让前端项目直接访问后端项目,按F5启动程序,如下图所示:

2 博客文章的前端实现

2.1 “element-plus”模板插件的导入与配置

2.1.1 “element-plus”导入命令:

    npm install element-plus

2.1.2  “element-plus”配置:

在“main.js”文件中定义如下配置:

import { createApp } from 'vue'

//把“element-plus”模板插件【导入】为全局变量:“ElementPlus”。

import ElementPlus from 'element-plus'

import 'element-plus/dist/index.css'

import App from './App.vue'

import router from './router'

import store from './store'

createApp(App)

    .use(store)

    .use(router)

    // 使全局变量:“ElementPlus”,在所有的*.vue页面中都有效。

    .use(ElementPlus)

    .mount('#app')

 2.2 axios路由组件导入命令:

    npm install axios

3 “BlogsView.vue”页面与路由

3.1 定义BlogsView.vue”页面

注意:

  1. 在方法定义时最好使用异步方法,同步方法会造成执行穿透,从而产生逻辑异常,常见现象是:第1个同步方法依赖于第2个同步方法的实例值,但由于第2个同步方法,还没有执行完成,第1个同步方法就会直接把默认值渲染显示在页面上。
  2. JavaScript代码是选项式API(Options API),这是vue2中的定义方式;vue3中提倡使用组合式api(composition API),两种定义方式在1个项目中可以混用,但在基于vue3项目中最好以组合式api(composition API)为主,如果可能最好只使用这种定义方式,由于本人水平和当前项目所以使用了选项式API(Options API)。

3.2 “BlogsView.vue”页面的路由定义

在“router\index.js”文件中定义如下配置:

{

    path: '/about',

    name: 'about',

    component: () => import('../views/AboutView.vue')

  },

  {

    path: '/Blog/Blogs',

    name: '博客管理',

    component: () => import('../views/Blog/BlogsView.vue'),

    meta: {

      title: '博客管理',

    }

  }

]

const router = createRouter({

  history: createWebHashHistory(),

  routes,

})

router.beforeEach(async (to) => {

  // 如果路由中有标题实例,而把标题渲染显示在标签上。

  if (to.meta.title) {

    document.title = to.meta.title;

  }

});

注意:

    在当前版本的Vue中路由的名称不能与*.vue页面的名称一样,例如:Blogs就与BlogsView.vue不同。

执行前端项目如下图所示:

对以上功能更为具体实现和注释见:221128_001_admin(BlogsView页面绑定渲染数据)。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...