WordPress 基础、MyBatis-Plus 接口设计与前端依赖问题排查
WordPress 域名托管及内容管理操作,详细展示了基于 Spring Boot 和 MyBatis-Plus 构建 RESTful 好友关系接口的 CRUD 实现,阐述了数据库 email 字段索引优化的原理与实践,并提供了前端 OpenAPI 工具中 tslib 依赖缺失问题的排查与修复方案。

WordPress 域名托管及内容管理操作,详细展示了基于 Spring Boot 和 MyBatis-Plus 构建 RESTful 好友关系接口的 CRUD 实现,阐述了数据库 email 字段索引优化的原理与实践,并提供了前端 OpenAPI 工具中 tslib 依赖缺失问题的排查与修复方案。

域名是网站的名称,用户在浏览器中输入以访问网站。对于 WordPress 网站,需通过域名注册商(如 GoDaddy、Namecheap)注册简洁易记的域名。
托管是指将网站文件存储在网络服务器上。WordPress 托管服务通常提供一键安装、自动更新备份及高级安全功能。主要分为共享托管(经济实惠)和托管型托管(资源独立,适合高流量)。
你的域名/wp-admin。以下是一套基于 Spring Boot 和 MyBatis-Plus 的好友关系 RESTful 接口设计示例。
| 功能 | 方法 | 路径 | 参数 | 返回 |
|---|---|---|---|---|
| 添加好友 | POST | /friends | {userId, friendId} | 操作结果 |
| 删除好友 | DELETE | /friends | {userId, friendId} | 操作结果 |
| 查询好友列表 | GET | /friends/{userId} | - | 好友列表 |
| 检查好友关系 | GET | /friends/check | userId, friendId | 是否好友 |
@RestController
@RequestMapping("/friends")
@RequiredArgsConstructor
public class FriendController {
private final FriendService friendService;
@PostMapping
public Result<Boolean> addFriend(@RequestBody @Valid FriendRequest request) {
return Result.success(friendService.addFriend(request.getUserId(), request.getFriendId()));
}
@DeleteMapping
public Result<Boolean> deleteFriend(@RequestBody @Valid FriendRequest request) {
return Result.success(friendService.deleteFriend(request.getUserId(), request.getFriendId()));
}
@GetMapping("/{userId}")
public Result<List<FriendDTO>> getFriends(@PathVariable Integer userId) {
return Result.success(friendService.getFriends(userId));
}
@GetMapping("/check")
public Result<Boolean> isFriend(@RequestParam Integer userId, @RequestParam Integer friendId) {
return Result.success(friendService.isFriend(userId, friendId));
}
@Data
static class FriendRequest {
@NotNull
private Integer userId;
@NotNull
private Integer friendId;
}
}
@Service
@RequiredArgsConstructor
public class FriendServiceImpl implements FriendService {
private final UserMapper userMapper;
private final FriendRelationMapper relationMapper;
@Override
@Transactional
public boolean addFriend(Integer userId, Integer friendId) {
checkUserExists(userId);
checkUserExists(friendId);
if (relationMapper.existsRelation(userId, friendId)) {
return false;
}
relationMapper.insert(new FriendRelation(userId, friendId));
relationMapper.insert(new FriendRelation(friendId, userId));
return true;
}
@Override
@Transactional
public boolean deleteFriend(Integer userId, Integer friendId) {
relationMapper.deleteRelation(userId, friendId);
relationMapper.deleteRelation(friendId, userId);
return true;
}
@Override
public List<FriendDTO> getFriends(Integer userId) {
return relationMapper.selectFriendList(userId).stream()
.map(user -> new FriendDTO(user.getId(), user.getNickname(), user.getAvatar()))
.collect(Collectors.toList());
}
@Override
public {
relationMapper.existsRelation(userId, friendId);
}
{
(userMapper.selectById(userId) == ) {
();
}
}
}
@Data
@TableName("user_friend_relation")
public class FriendRelation {
@TableId(type = IdType.AUTO)
private Long id;
private Integer userId;
private Integer friendId;
private LocalDateTime createTime;
}
public interface FriendRelationMapper extends BaseMapper<FriendRelation> {
@Select("SELECT COUNT(1) FROM user_friend_relation " +
"WHERE user_id = #{userId} AND friend_id = #{friendId}")
boolean existsRelation(@Param("userId") Integer userId, @Param("friendId") Integer friendId);
@Delete("DELETE FROM user_friend_relation " +
"WHERE user_id = #{userId} AND friend_id = #{friendId}")
int deleteRelation(@Param("userId") Integer userId, @Param("friendId") Integer friendId);
@Select("SELECT u.* FROM user u " +
"JOIN user_friend_relation r ON u.id = r.friend_id " +
"WHERE r.user_id = #{userId}")
List<User> selectFriendList(Integer userId);
}
@Data
public class Result<T> {
private int code;
private String msg;
private T data;
public static <T> Result<T> success(T data) {
Result<T> result = new Result<>();
result.setCode(200);
result.setMsg("success");
result.setData(data);
return result;
}
}
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
UNIQUE INDEX idx_email (email)
);
在使用 OpenAPI 工具生成前端代码时,可能遇到 Cannot find module 'tslib' 错误。
手动安装 tslib
npm install tslib --save
# 或使用 Yarn
yarn add tslib
验证依赖结构
检查 node_modules 目录中是否存在 tslib。
验证 package.json 确保包含如下依赖项:
{
"dependencies": {
"tslib": "^2.6.2"
}
}
重新运行命令
npm run openapi

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online