json-server|0编码实现REST API

news2025/1/20 21:59:37

在这里插入图片描述

欢迎来到我的博客
📔博主是一名大学在读本科生,主要学习方向是前端。
🍭目前已经更新了【Vue】、【React–从基础到实战】、【TypeScript】等等系列专栏
🛠目前正在学习的是🔥 R e a c t 框架 React框架 React框架🔥,中间穿插了一些基础知识的回顾
🌈博客主页👉codeMak1r.小新的博客

😇本文目录😇

    • 前言
    • 什么是json-server?
    • 安装json-server
    • json-server的使用
      • 取数据 -- get
      • 增加数据 -- post
      • 更新数据 -- put
      • 局部更新 -- patch
      • 删除数据 -- delete
      • 连接操作 -- _embed
      • 连接操作 -- _expand

本文被专栏【前端常见JS库】收录

🕹坚持创作✏️,一起学习📖,码出未来👨🏻‍💻!

前言

在个人前端项目实战中,我们经常因为缺少数据,没有相应的后端数据,导致没办法做出良好的页面来提升自己。其实,有一种方法,可以不需要java API,不需要node API0编码即可实现一个包含增删改查的API接口,还能实现过滤、查询、排序等等操作

这个方法就是:json-server。各位,30秒时间,一个json文件,剩下的交给json-server通通都能搞定!

什么是json-server?

一个基于express,node的一个被npm管理的库,它可以基于一个json文件,来为前端提供一个良好、可用的模拟数据接口。

(类似mock^^)

json-server站在mock与express的肩膀上,为前端提供了不错的模拟数据解决方案。

另外,json-server在创建server服务的同时,设置了Access-Control-Allow-Origin请求头,在服务端层面解决了跨域资源共享,无需前端再配置跨域。

安装json-server

npm i json-server 
yarn global add json-server
//
!需要全局安装!

json-server的使用

在包安装完成之后,json-server提供了全局命令:json-server --watch

我们首先准备一个用于测试的json文件,例如,我在~/Documents/db/路径下创建了一个test.json文件,文件内容如下:

~/Documents/db/test.json

{
  "posts": [
    { "id": 1, "title": "json-server", "author": "typicode" },
    { "id": 2, "title": "json-server-test", "author": "codeMak1r" }
  ],
  "comments": [
    { "id": 1, "body": "comment1", "postId": 1 },
    { "id": 2, "body": "comment2", "postId": 2 }
  ]
}

启动json-server服务:

json-server --watch test.json

如果执行成功了,那么服务就已经开启在3000端口了。

如果报以下错误:

在这里插入图片描述

说明你电脑中的3000端口已被占用,我们换个端口就好了:

json-server --watch db.json --port 5000

使用--port指定服务开启的端口号。

此时,直接在浏览器的地址栏中访问json-server服务,我的json-server服务是开启在5000端口的,于是我在浏览器地址栏中输入:localhost:5000按下回车,看到如下页面:

在这里插入图片描述

说明你的json-server服务器启动成功。

取数据 – get

axios.get("http://localhost:5000/posts".then(res => {
	console.log(res)
}))
// 取id=1的数据
axios.get("http://localhost:5000/posts?id=1")
// 取id=1且title=json-server的数据
axios.get("http://localhost:5000/posts?id=1&title=json-server")
// 取id=1的对象
axios.get("http://localhost:5000/posts/1")

增加数据 – post

axios.post("http://localhost:5000/posts",{
  title: "333",
  author: "xiaoming"
})

此时,test.json文件内容变为

{
  "posts": [
    { "id": 1, "title": "json-server", "author": "typicode" },
    { "id": 2, "title": "json-server-test", "author": "codeMak1r" },
    { "id": 3, "title": "333", "author": "xiaoming" }
  ],
  "comments": [
    { "id": 1, "body": "comment1", "postId": 1 },
    { "id": 2, "body": "comment2", "postId": 2 }
  ]
}

更新数据 – put

axios.put("http://localhost:5000/posts/1",{
  title: "json-server-修改"
})

此时,test.json文件内容变为

{
  "posts": [
    { "id": 1, "title": "json-server-修改" },
    { "id": 2, "title": "json-server-test", "author": "codeMak1r" },
    { "id": 3, "title": "333", "author": "xiaoming" }
  ],
  "comments": [
    { "id": 1, "body": "comment1", "postId": 1 },
    { "id": 2, "body": "comment2", "postId": 2 }
  ]
}

我们发现,原先数据中的author字段不见了,这是因为在put请求下,创建的是一个新的对象,你没有声明修改的字段(比如author)默认视为舍弃,新对象中只有id、title字段存在。

如果想要不声明修改的字段就保留原字段值的话,可以使用局部更新

局部更新 – patch

axios.patch("http://localhost:5000/posts/2"),{
  title: "json-server-test-修改"
}

此时,test.json文件内容:

{
  "posts": [
    { "id": 1, "title": "json-server-修改" },
    { "id": 2, "title": "json-server-test-修改", "author": "codeMak1r" },
    { "id": 3, "title": "333", "author": "xiaoming" }
  ],
  "comments": [
    { "id": 1, "body": "comment1", "postId": 1 },
    { "id": 2, "body": "comment2", "postId": 2 }
  ]
}

在局部更新下,没有声明的author字段被保留下来了,并没有被舍弃。

删除数据 – delete

axios.delete("http://localhost:5000/posts/3")

此时,test.json文件内容:

{
  "posts": [
    { "id": 1, "title": "json-server-修改" },
    { "id": 2, "title": "json-server-test-修改", "author": "codeMak1r" }
  ],
  "comments": [
    { "id": 1, "body": "comment1", "postId": 1 },
    { "id": 2, "body": "comment2", "postId": 2 }
  ]
}

连接操作 – _embed

连接操作符:_embed获取包含下级资源的数据(类似SQL语句中的表关联)

// 查询文章以及文章对应的评论
axios.get("http://localhost:5000/posts?_embed=comments")

查询结果为:

[
  {
    id: 1,
    title: "json-server-修改",
    comments: [{
      id: 1,
      body: "comment1",
  		postId: 1
    }]
  },
  {
    id: 2,
    title: "json-server-test-修改",
    comments: [{
      id: 2,
      body: "comment2",
      postId: 2
    }]
  }
]

连接操作 – _expand

连接操作符:_expand获取包含上级资源的数据

// 查询评论以及评论所属的文章
axios.get("http://localhost:5000/comments?_expand=post")

查询结果为:

[
  {
    id: 1,
    body: "comment1",
    postId: 1,
    post: {
      id: 1,
      title: "json-server-修改"
    }
  },
  {
    id: 2,
    body: "comment2",
    postId: 2,
    post: {
      id: 2,
      title: "json-server-test-修改",
      author: "codeMak1r"
    }
  }
]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp中的renderjs使用

需求是用openlayers在uniapp框架下做一个移动gis类的软件,选择用renderjs实现地图与dom的交互,一开始也是小白,通过百度资料以及一步步测试后掌握了renderjs的使用,以及地图功能的实现。 一、renderjs的作用是什么? r…

初始vue3

如今新vue项目首选用vue3 typescript vite pinia……模式。在使用Vue2时,使用的是选项式api进行vue项目的开发,vue3在这里做了重大的更新,vue3使用组合式api进行对项目实例化和构建。另外需要注意vue项目需要nodeJS环境的支持,…

LaTex(1):使用在线表格生成器工具生成LaTex表格

目录 0 在线工具 1 常用命令: 1.0 编辑表格 1.1 Table—set size可以改变表格大小: 1.2 合并表格和拆分表格: 1.3 生成latex代码与复制代码: 2 示例 0 在线工具 表格生成器网页:Create LaTeX tables online –…

BootStrap基本使用

目录 BootStrap框架 BootStrap特点 bootstrap的使用 布局容器 固定宽度 完整宽度 栅格网格系统 前言 列的形式 列组合和列偏移 列排序 列嵌套 排版 标题 段落 强调 对齐效果 列表 去点列表 内联列表 定义列表 代码 表格 表单标签 文本框和文本域 单…

【web服务】nginx为什么这么受企业欢迎?看完这边文章你就懂了

📋 个人简介 💖 作者简介:大家好,我是小鹏linux,运维领域创作者,阿里云ACE认证高级工程师😜 📝 个人主页:小鹏linux🔥 🎉 支持我:点赞…

【ES6丨前端进阶基础 】ES6的关键字,新特性以及解构赋值

💂 个人主页:Aic山鱼 个人社区:山鱼社区 💬 如果文章对你有所帮助请点个👍吧!欢迎关注、点赞、收藏(一键三连)和订阅专目录 前言 什么是ecmascrpit 一,let关键字的特点 1.不能重复声明变量 2.块级作用…

Http协议之Content-Type理解

Content-Type,翻译过来就是”内容类型“,在互联网中就是”互联网媒体类型“。 在互联网中,两台计算机经常会传输数据,客户端会给服务器发数据,服务器也会给客户端发数据。数据的类型也是有很多种的,我们把所…

【微信小程序系列:四】前端利用wx.setStorageSync缓存设置有效时间

先言: 简单来说,就是利用缓存,进行有效期的保存,以此前端加以判断,在如登录状态过期,操作过期等场景使用,扩展性还蛮多的。 官方文档 实现: 原理:就是先设置一个缓存&…

项目实战 之 vue3 + vite + pinia

目录 一、创建项目 1. 安装vite 2. 创建项目 3. 安装过程 二、项目基本配置 1. 项目icon 2. 项目标题 3. 配置 jsconfig.json 4. 设置 .prettierrc 文件 5. 生成代码片段 01 - 网址 02 - 生成 03 - 配置 04 - 使用 三、项目目录 结构划分 1. assets 2. compo…

require.context()的用法详解

require.context()的用法详解🌴require.context()的介绍🌺用法一:在组件内引入多个组件🌼用法二:在main.js中引入大量公共组件🍂用法三:使用插件注册全局组件&#x1f33…

axios+vue 请求时如何携带cookie

axiosvue 请求时如何携带cookie 1,当符合同源策略时,可以直接设置 document.cookie " 你要设置的内容 " mounted() {document.cookie "ioiopipoadiasdasdbasdbas"; // 非跨域传递cookie 直接设置cookie即可this.getData(); /…

Node.js安装,npm安装yarn步骤

第一步,首先安装npm npm是node.js下的包管理器,node.js的下载网址 Node.js 1.下载安装包后一路无脑点击next最后点击finish即可,安装完成之后打开文件夹就是以下目录。 2.在cmd窗口输入node -v、npm -v查看版本检查是否安装成功 一般完成以…

总结JS中常用的数组的方法大全

总结JS中常用的数组方法 JS中常用的数组方法总结 数组(Array)是一种复杂的数据类型,它属于Object(对象)类型,用来将一组数组合在一起,通过一个变量就可以访问一组数据。在使用数组时,经常会搭配循环语句使用,从而很方便…

Vue3+TS+Vite+Element Plus搭建后台管理系统

Vue3TSViteElement Plus搭建后台管理系统1、简介2、效果图3、技术栈4、项目目录5、setting.js(全局配置文件)6、路由router7、状态管理stores8、下载地址总结1、简介 该示例是vue3、typescript、vite、element plus搭建前端管理框架,主要模块分为:菜单、…

用 vite 构建 vue3 + TS 项目实战

目录 1、项目初始化 2、eslint 基础配置 3、配置 git commit hook 4、在开发和构建中进行代码规范校验 5、GitCommit规范 6、 Vite中的TS环境说明 7、Vue3 中 Ts 支持 8、Vue3中的script-setup语法 9、script-setup中的编译宏 10、配置转换JSX和TSX 11、初始化…

vue2计算属性computed

1.什么是计算属性 概念: 1.计算属性是vue的一个特性,此属性有计算能力,也就相当于一个函数。可以将计算结果缓存,作为一个属性使用。 特点: 1.要在 methods: { } 或者 computed: { } 中 ,以方…

基于SpringBoot的医疗管理系统(Java毕业设计)

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、…

鲜花商城系统设计与实现(Java+Web+MySQL)

目 录 摘 要 I Abstract II 1 绪论 1 1.1 现状分析 1 1.2 研究意义 1 1.3 研究方法 1 2 系统的开发环境及技术简介 3 2.1 系统开发环境简介 3 2.2 系统开发技术简介 3 3 可行性研究 7 3.1 经济可行性 7 3.2 技术可行性 7 3.3 操作可行性 7 3.4 法律可行性 7 4 需求分析 9 4.1 …

vue+elementui中el-upload组件上传文件时,修改文件名,不用FormData

前言 今天在开发的时候,后端突然提了一个需求,因为特殊的文件上传不进文件服务器,所以后端问我能不能上传的时候给加个扩展名,本着只要逻辑没问题,都可以通过代码实现的理念,我说:“可以“”&a…

攻防世界WEB练习区(backup、cookie、disabled_button)

前言 作者简介:不知名白帽,网络安全学习者。 博客主页:https://blog.csdn.net/m0_63127854?typeblog 攻防世界专栏:https://blog.csdn.net/m0_63127854/category_11983747.html 网络安全交流社区:https://bbs.csdn.ne…