项目5-博客系统3+接口完

1.实现显示用户信息

⽬前⻚⾯的⽤⼾信息部分是写死的. 形如

我们期望这个信息可以随着用户登陆而发生改变.
如果当前⻚⾯是博客列表⻚, 则显⽰当前登陆⽤⼾的信息.
如果当前⻚⾯是博客详情⻚, 则显⽰该博客的作者⽤⼾信息.
注意: 当前我们只是实现了显⽰⽤⼾名, 没有实现显⽰⽤⼾的头像以及⽂章数量等信息.

1.1 约定前后端交互接⼝

在博客列表⻚, 获取当前登陆的⽤⼾的⽤⼾信息
[请求]
/user/getUserInfo
[响应]
{
        userId: 1,
        username:test
        ...
}

 在博客详情⻚, 获取当前⽂章作者的⽤⼾信息

[ 请求 ]
/user/getAuthorInfo?blogId=1
[ 响应 ]
{
userId: 1,
username: test
}

1.2 实现服务器代码

1.controller包

在 UserController添加代码

2.Service包 

1.3 实现客⼾端代码

1. 修改 blog_list.html

在响应回调函数中, 根据响应中的⽤⼾名, 更新界⾯的显⽰

2. 修改 blog_detail.html

部署程序, 验证效果.

点击进去,发现有的用户未显示!!!

通过查看发现问题

获得的id有问题!!!

修改后重新测试!!!

成功!11 

因为上述修改的blog_list.html和blog_detail代码重合(只有url不一致),

因此可以将代码整合: 提取common.js

引⼊common.js

<script src="js/common.js"></script>  

blog_list.html 代码修改

blog_detail.html 代码修改  

重新测试 

成功!!!

2.实现⽤⼾退出

前端直接清除掉token即可.
实现客⼾端代码
<<注销>> 链接已经提前添加了onclick事件
在common.js中完善logout⽅法

测试!!!前端的书写注意空格

成功!!! 

3.实现发布博客

3.1 约定前后端交互接口

[ 请求 ]
/blog/ add
title= 标题 &content= 正⽂ ...
[ 响应 ]
{
        "code": 200 ,
        "msg": "",
        "data": true
}
// true 成功
// false 失败

 3.2 实现服务器代码

@RequestMapping("/add")
    public Result addNewBlog(String content,String title, HttpServletRequest httpServletRequest){
        //获取当前token,获取当前用户登录id
        String jwtToken=httpServletRequest.getHeader(Constant.USER_TOKEN);
        Integer loginUserId= JwtUtils.getUserIdFromToken(jwtToken);

        if(loginUserId==null||loginUserId<1){
            log.error("用户未登录");
            return Result.fail(Constant.RESULT_CODE_UNLOGIN,"用户未登录");
        }

        BlogInfo blogInfo=new BlogInfo();
        blogInfo.setUserId(loginUserId);
        blogInfo.setContent(content);
        blogInfo.setTitle(title);
        blogInfoService.insertBlog(blogInfo);
        Integer factorNum=blogInfoService.insertBlog(blogInfo);
        return Result.success(true);
    }
    public Integer insertBlog(BlogInfo blogInfo){
        return blogInfoMapper.insertNewBlog(blogInfo);
    }

3.3 editor.md 简单介绍

editor.md 是⼀个开源的⻚⾯ markdown 编辑器组件.
官⽹参⻅: http://editor.md.ipandao.com/
代码: https://pandao.github.io/editor.md/

3.3.1 使⽤⽰例

<link rel="stylesheet" href="editormd/css/editormd.css" />
<div id="test-editor">
 <textarea style="display:none;">### 关于 Editor.md
**Editor.md** 是⼀款开源的、可嵌⼊的 Markdown 在线编辑器(组件),基于 CodeMirror、
jQuery 和 Marked 构建。
 </textarea>
</div>
<script src="https://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
<script src="editormd/editormd.min.js"></script>
<script type="text/javascript">
 $(function() {
 var editor = editormd("test-editor", {
 // width : "100%",
 // height : "100%",
 path : "editormd/lib/"
 });
 });
</script>
使⽤时引⼊对应依赖就可以了
"test-editor" 为 markdown编辑器所在的div的id名称
path为 editor.md依赖所在的路径

3.4 实现客⼾端代码

修改 blog_edit.html
完善submit⽅法
function submit() {
            $.ajax({
                type: "get",
                url: "/blog/add",
                data: {
                    "title": $("#title").val(),
                    "content": $("#content").val()
                },
                success: function(result){
                    console.log(result);
                    if(result.code==200 && result.data==true){
                        alert("发表博客成功");
                        location.href="blog_list.html";
                    }else{
                        alert(result.msg);
                        return;
                    }
                },
                error: function(error){
                    if(error!=null && error.status==401){
                        alert("⽤⼾未登录, 登录后再进⾏对应操作")
                        location.href="blog_login.html";
                    }
                }
            });
        }
部署程序, 验证效果.

 

3.5 修改详情⻚⻚⾯显⽰ 

此时会发现详情⻚会显⽰markdown的格式符号, 我们对⻚⾯进⾏也下处理

1. 修改 html 部分

把博客正⽂的 div 标签, 改成 <div id="detail"> 并且加上 style="background-color: transparent;"

2.修改博客正⽂内容的显⽰

$.ajax({
 type: "get",
 url: "/blog/getBlogDetail" + location.search,
 success: function (result) {
 
 //...代码省略
 editormd.markdownToHTML("detail", {
 markdown: result.data.content,
 });
 //...代码省略
});

 成功了!!!!!

4.实现删除/编辑博客 

进⼊⽤⼾详情⻚时, 如果当前登陆⽤⼾正是⽂章作者, 则在导航栏中显⽰ [编辑] [删除] 按钮, ⽤⼾点击时则进⾏相应处理.
需要实现两件事:
判定当前博客详情⻚中是否要显⽰[编辑] [删除] 按钮
实现编辑/删除逻辑.
删除采⽤逻辑删除, 所以和编辑其实为同⼀个接⼝.

4.1 约定前后端交互接⼝

1. 判定是否要显⽰[编辑] [删除] 按钮
修改之前的 获取博客 信息的接⼝, 在响应中加上⼀个字段.
loginUser 为 1 表⽰当前博客就是登陆⽤⼾⾃⼰写的.
[ 请求 ]
/blog/getBlogDetail?blogId=1
[ 响应 ]
{
"code": 200,
"msg": "",
"data": {
"id": 1,
"title": " 第⼀篇博客 ",
"content": "111 我是博客正⽂我是博客正⽂我是博客正⽂ ",
"userId": 1,
"loginUser": 1
"deleteFlag": 0,
"createTime": "2023-10-21 16:56:57",
"updateTime": "2023-10-21T08:56:57.000+00:00"
}
}

2. 修改博客

[ 请求 ]
/blog/ update
[ 参数 ]
Content-Type: application/json
{
"title": " 测试修改⽂章 ",
"content": " 在这⾥写下⼀篇博客 ",
"blogId": "4"
}
[ 响应 ]
{
"code": 200 ,
"msg": "",
"data": true
}

3.删除博客

[ 请求 ]
/blog/ delete ?blogId= 1
[ 响应 ]
{
        "code": 200 ,
        "msg": "",
        "data": true
}

4.2 实现服务器代码  

1.给 User 类新增⼀个字段

private Integer loginUser;

2.修改 BlogController  

2.1 只处理 "getBlogDeatail" 中的逻辑
2.2 增加 update/delete ⽅法, 处理修改/删除逻辑.  

接收JSON对象, 需要使⽤ @RequestBody 注解

4.3 实现客⼾端代码 

1. 判断是否显⽰[编辑] [删除]按钮

编辑博客逻辑:
修改blog_update.html
⻚⾯加载时, 请求博客详情

测试!!!

详情页总是出不来,经检查是拼接字符串漏了东西

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习(1)

参考学习韩顺平老师 第一章&#xff1a;LINUX 开山篇-内容介绍 1.2.Linux 使用在那些地方 linux运营工程师主要做&#xff1a; 服务器规划 调试优化 对系统进行日常监控 故障处理 对数据的备份和处理 日志的分析 1.3.Linux 的应用领域 1.个人桌面领域的应用 …

短视频底层逻辑分析

短视频底层逻辑 1.迭代模型_ev 2.Douyin的本质_ev 3.Douyin的审核机制_ev 4.平台趋势_ev 5.定位_ev 6.建立用户期待_ev 7.好内容的定义_ev 8怎么做好内容_ev 9.如何做好选题_ev 10.如何快速模仿_ev 11.账号拆解的底层逻辑_ev 12选人的重要性_ev 13.内容的包装_ev 14.打造大IP的…

easyexcel升级3.3.4失败的经历

原本想通过easyexcel从2.2.6升级到3.3.3解决一部分问题&#xff0c;结果之前的可以用的代码&#xff0c;却无端的出现bug 1 Sheet index (1) is out of range (0…0) 什么都没有改&#xff0c;就出了问题&#xff0c;那么问题肯定出现在easyexcel版本自身.使用模板填充的方式进…

Innodb之redo日志

Innodb引擎执行流程 redo log ​ MySQL中的redo log&#xff08;重做日志&#xff09;是实现WAL&#xff08;预写式日志&#xff09;技术的关键组件&#xff0c;用于确保事务的持久性和数据库的crash-safe能力。借用《孔乙己》中酒店掌柜使用粉板记录赊账的故事&#xff0c;…

Flask前端页面文本框展示后端变量,路由函数内外两类

一、外&#xff01;路由函数外的前后端数据传输 Flask后端 ↓ 首先导入包&#xff0c;需要使用 后端&#xff1a;flask_socketio来进行路由外的数据传输&#xff0c; from flask_socketio import SocketIO, emit 前端&#xff1a;还有HTML头文件的设置。 <!DOCTYPE …

【云原生数据库:原理与实践】1- 数据库发展历程

1-数据库发展历程 1.1 数据库发展概述 从1960年&#xff1a;Integrated Database System&#xff08;IDS&#xff09;&#xff0c;该系统是一个网状模型&#xff08;Network Model&#xff09;到 IMS&#xff08;Information Management System&#xff09;&#xff0c;使用了…

Rust腐蚀服务器清档多教程

Rust腐蚀服务器清档多教程 大家好我是艾西&#xff0c;一个做服务器租用的网络架构师。上期教了大家怎么搭建服务器以及安装插件等那么随着大家自己架设服或是玩耍的时间肯定会有小伙伴想要去新增开区数量或是把原本的服务器进行一些调整等&#xff0c;那么今天主要聊的就是怎…

【智能算法】鸭群算法(DSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年&#xff0c;Zhang等人受到自然界鸭群觅食行为启发&#xff0c;提出了鸭群算法&#xff08;Duck Swarm Algorithm, DSA&#xff09;。 2.算法原理 2.1算法思想 DSA基于自然界鸭群觅食过程&…

[leetcode] max-area-of-island

. - 力扣&#xff08;LeetCode&#xff09; 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&…

基于SpringBoot+Vue的共享汽车管理系统(源码+文档+包运行)

一.系统概述 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了共享汽车管理系统的开发全过程。通过分析共享汽车管理系统管理的不足&#xff0c;创建了一个计算机管理共享汽车管理系统的方案。文章介绍了共享汽车管理…

从 MySQL 到 DynamoDB,Canva 如何应对每天新增的 5000 万素材

作为一款设计工具&#xff0c;Canva 吸引人的一个重要特色就是拥有数以亿计的照片和图形资源&#xff0c;支持用户上传个人素材。 Canva 于 2013 年推出&#xff0c;设立了一个包含大量照片和图形的资源库&#xff0c;并允许用户上传自己的素材以用于设计。从发布之日起&#…

Python数学建模学习-PageRank算法

1-基本概念 PageRank算法是由Google创始人Larry Page在斯坦福大学时提出&#xff0c;又称PR&#xff0c;佩奇排名。主要针对网页进行排名&#xff0c;计算网站的重要性&#xff0c;优化搜索引擎的搜索结果。PR值是表示其重要性的因子。 中心思想&#xff1a; 数量假设&#…

JavaScript基础:js介绍、变量、数据类型以及类型转换

目录 介绍 引入方式 内部方式 外部形式 注释和结束符 单行注释 多行注释 结束符 输入和输出 输出 输入 变量 声明 赋值 关键字 变量名命名规则 常量 数据类型 数值类型 字符串类型 布尔类型 undefined 类型转换 隐式转换 显式转换 Number ✨介绍 &a…

typescript中的type关键字和interface关键字区别

Type又叫类型别名&#xff08;type alias&#xff09;,作用是给一个类型起一个新名字&#xff0c;不仅支持interface定义的对象结构&#xff0c;还支持基本类型、联合类型、交叉类型、元组等任何你需要手写的类型。 type num number; // 基本类型 type stringOrNum string |…

47.HarmonyOS鸿蒙系统 App(ArkUI)创建轮播效果

创建轮播效果&#xff0c;共3页切换 Entry Component struct Index {State message: string Hello Worldprivate swiperController: SwiperController new SwiperController()build() {Swiper(this.swiperController) {Text("第一页").width(90%).height(100%).bac…

BLE架构图

PHY层(Physical layer 物理层) PHY层用来指定BLE所用的无线频段(2.4G)&#xff0c;调制解调方式和方法、跳频等。PHY层的性能直接决定整个BLE芯片的功耗、灵敏度以及selectivity等射频指标。 LL层(Link Layer 链路层) 链路层主要是对RF射频控制。链路层定义了协议栈中最为基础的…

C++解决大学课设所有管理系统(增删查改)

C一篇解决大学课设所有**管理系统(增删查改) 文章目录 C一篇解决大学课设所有**管理系统(增删查改)1.引言1.1 使用结果展示 2. 基本原理3. 文件层次结构4.具体实现(通讯录管理系统为例)4.1 通讯录实体类(addressbook.h)4.2 通讯录实现类(addressbook.cpp)4.3 通讯录管理类&…

蓝桥杯 — — 完全日期

完全日期 友情链接&#xff1a;完全日期 题目&#xff1a; 思路&#xff1a; 直接从20010101枚举到20211231&#xff0c;然后再判断每一个数是否是一个合法的日期&#xff0c;如果这个日期是合法的&#xff0c;接着判断这个日期的每一个位置上的数字之和是否是一个完全平方数…

ChatGPT 可以预测未来吗?

推荐 4月13日的一篇有趣的 paper&#xff0c;特来分享。 &#x1f449; 当前的大型语言模型&#xff08;LLMs&#xff09;具有强大的数据合成和推理能力&#xff0c;但它们在直接预测尚未发生事件的准确性上常常受到限制。传统的预测方法依赖于直接询问模型关于未来的问题。 …