不部署服务端调用接口,前端接口神器json-server
简介
json-server
是一款小巧的接口模拟工具,一分钟内就能搭建一套 Restful 风格的 API,尤其适合前端接口测试使用。
只需指定一个 json
文件作为 api
的数据源即可,使用起来非常方便,30秒入门,基本上有手就行。
进阶操作还支持分页,排序等操作,简直强大。
开源地址
主页地址:json-server - npm
Github项目地址:GitHub - typicode/json-server: Get a full fake REST API with zero coding in less than 30 seconds (seriously)
30秒入门
环境依赖
- 安装 Node.js 环境即可
操作步骤
- 安装 JSON 服务器
npm install -g json-server
- 创建一个
db.json
包含一些数据的文件
{"posts": [{ "id": 1, "title": "json-server", "author": "typicode" }],"comments": [{ "id": 1, "body": "some comment", "postId": 1 }],"profile": { "name": "typicode" }
}
- 启动
json-server
接口服务器
json-server --watch db.json
- 浏览器访问 http://localhost:3000/posts/1,你会得到
{ "id": 1, "title": "json-server", "author": "typicode" }
补充
- 如果您发出 POST、PUT、PATCH 或 DELETE 请求,更改将自动安全地保存到
db.json
文件中。 - 注意 id 值是不可变的。
路由进阶
根据之前的db.json
文件,这里是所有的默认路由。
路由形式一
GET /posts
GET /posts/1
POST /posts
PUT /posts/1
PATCH /posts/1
DELETE /posts/1
路由形式二
GET /profile
POST /profile
PUT /profile
PATCH /profile
筛选
使用 .
访问筛选
GET /posts?title=json-server&author=typicode
GET /posts?id=1&id=2
GET /comments?author.name=typicode
分页
使用_page
和可选地_limit
对返回的数据进行分页。
在Link
标题,你会得到first
,prev
,next
和last
链接。
GET /posts?_page=7
GET /posts?_page=7&_limit=20
默认返回10项
排序
添加_sort
和_order
(默认升序)
GET /posts?_sort=views&_order=asc
GET /posts/1/comments?_sort=votes&_order=asc
对于多个字段,请使用以下格式:
GET /posts?_sort=user,views&_order=desc,asc
切片(分页)
添加_start
和_end
或_limit
GET /posts?_start=20&_end=30
GET /posts/1/comments?_start=20&_end=30
GET /posts/1/comments?_start=20&_limit=10
与Array.slice完全一样工作(即_start
开始_end
结束)
特殊符号
添加_gte
或_lte
获取范围
GET /posts?views_gte=10&views_lte=20
添加_ne
以排除值
GET /posts?id_ne=1
添加_like
到过滤器(支持正则表达式)
GET /posts?title_like=server
全文搜索
添加 q
GET /posts?q=internet
关系
要包含子资源,请添加 _embed
GET /posts?_embed=comments
GET /posts/1?_embed=comments
要包含父资源,请添加 _expand
GET /comments?_expand=post
GET /comments/1?_expand=post
获取或创建嵌套资源(默认为一级)
GET /posts/1/comments
POST /posts/1/comments
数据库
GET /db
主页
返回默认索引文件或服务./public
目录
GET /
附加功能
静态文件服务器
您可以使用 JSON Server 为您的 HTML、JS 和 CSS 提供服务,只需创建一个./public
目录或用于--static
设置不同的静态文件目录。
mkdir public
echo 'hello world' > public/index.html
json-server db.json
json-server db.json --static ./some-other-dir
替换端口
您可以使用以下--port
标志在其他端口上启动 JSON Server
:
$ json-server --watch db.json --port 3004
支持跨域
您可以使用 CORS 和 JSONP 从任何地方访问您模拟的 API 接口。
远程模式
您可以加载远程模式。
$ json-server http://example.com/file.json
$ json-server http://jsonplaceholder.typicode.com/db
生成随机数据
使用 JS 而不是 JSON 文件,您可以通过编程方式创建数据。
// index.js
module.exports = () => {const data = { users: [] }// 创建 1000 个用户信息for (let i = 0; i < 1000; i++) {data.users.push({ id: i, name: `user${i}` })}return data
}
$ json-server index.js
提示:使用Faker、Casual、Chance或JSON Schema Faker 等模块。
添加自定义路由
创建一个routes.json
文件。注意每条路线都以/
.
{"/api/*": "/$1","/:resource/:id/show": "/:resource/:id","/posts/:category": "/posts?category=:category","/articles\\?id=:id": "/posts/:id"
}
使用--routes
选项启动 JSON 服务器。
json-server db.json --routes routes.json
现在您可以使用其他路线访问资源。
/api/posts # → /posts
/api/posts/1 # → /posts/1
/posts/1/show # → /posts/1
/posts/javascript # → /posts?category=javascript
/articles?id=1 # → /posts/1
添加中间件
您可以使用以下--middlewares
选项从 CLI 添加中间件:
// hello.js
module.exports = (req, res, next) => {res.header('X-Hello', 'World')next()
}
json-server db.json --middlewares ./hello.js
json-server db.json --middlewares ./first.js ./second.js
命令行使用
json-server [options] <source>Options:--config, -c Path to config file [default: "json-server.json"]--port, -p Set port [default: 3000]--host, -H Set host [default: "localhost"]--watch, -w Watch file(s) [boolean]--routes, -r Path to routes file--middlewares, -m Paths to middleware files [array]--static, -s Set static files directory--read-only, --ro Allow only GET requests [boolean]--no-cors, --nc Disable Cross-Origin Resource Sharing [boolean]--no-gzip, --ng Disable GZIP Content-Encoding [boolean]--snapshots, -S Set snapshots directory [default: "."]--delay, -d Add delay to responses (ms)--id, -i Set database id property (e.g. _id) [default: "id"]--foreignKeySuffix, --fks Set foreign key suffix, (e.g. _id as in post_id)[default: "Id"]--quiet, -q Suppress log messages from output [boolean]--help, -h Show help [boolean]--version, -v Show version number [boolean]Examples:json-server db.jsonjson-server file.jsjson-server http://example.com/db.jsonhttps://github.com/typicode/json-server
您还可以在json-server.json
配置文件中设置选项。
{"port": 3000
}
模块
如果您需要添加身份验证、验证或任何行为,您可以将项目作为模块与其他 Express 中间件结合使用。
简单的例子
$ npm install json-server --save-dev
// server.js
const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('db.json')
const middlewares = jsonServer.defaults()server.use(middlewares)
server.use(router)
server.listen(3000, () => {console.log('JSON Server is running')
})
$ node server.js
您提供给jsonServer.router
函数的路径是相对于您启动节点进程的目录的。如果从另一个目录运行上述代码,最好使用绝对路径:
const path = require('path')
const router = jsonServer.router(path.join(__dirname, 'db.json'))
对于内存数据库,只需将对象传递给jsonServer.router()
.
另请注意,jsonServer.router()
它可用于现有的 Express 项目。
自定义路由示例
假设您想要一个回显查询参数的路由和另一个在创建的每个资源上设置时间戳的路由。
const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('db.json')
const middlewares = jsonServer.defaults()// 设置默认中间件(记录器、静态、cors 和无缓存)
server.use(middlewares)// 写在自定义路由之前
server.get('/echo', (req, res) => {res.jsonp(req.query)
})// 要处理 POST、PUT 和 PATCH,您需要使用 body-parser
// 您可以使用 JSON Server
server.use(jsonServer.bodyParser)
server.use((req, res, next) => {if (req.method === 'POST') {req.body.createdAt = Date.now()}// 继续到 JSON Server 路由器next()
})// 使用默认路由器
server.use(router)
server.listen(3000, () => {console.log('JSON Server is running')
})
访问控制示例
const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('db.json')
const middlewares = jsonServer.defaults()server.use(middlewares)
server.use((req, res, next) => {if (isAuthorized(req)) { // 在此处添加您的授权逻辑next() // 继续到 JSON Server 路由器} else {res.sendStatus(401)}
})
server.use(router)
server.listen(3000, () => {console.log('JSON Server is running')
})
自定义输出示例
要修改响应,请覆盖router.render
方法:
// 在这个例子中,返回的资源将被包装在一个 body 属性
router.render = (req, res) => {res.jsonp({body: res.locals.data})
}
您可以为响应设置自己的状态代码:
// 在这个例子中,我们模拟了一个服务器端错误响应
router.render = (req, res) => {res.status(500).jsonp({error: "error message here"})
}
重写器示例
要添加重写规则,请使用jsonServer.rewriter()
:
// 写在 server.use(router) 之前
server.use(jsonServer.rewriter({'/api/*': '/$1','/blog/:resource/:id/show': '/:resource/:id'
}))
在另一个端点上挂载 JSON 服务器示例
或者,您也可以将路由器安装在/api
.
server.use('/api', router)
API
jsonServer.create()
返回一个 Express 服务器。
jsonServer.defaults([options])
返回 JSON 服务器使用的中间件。
- 选项
static
静态文件的路径logger
启用记录器中间件(默认值:true)bodyParser
启用 body-parser 中间件(默认值:true)noCors
禁用 CORS(默认值:false)readOnly
只接受 GET 请求(默认值:false)
jsonServer.router([path|object])
返回 JSON 服务器路由器。
相关文章:
不部署服务端调用接口,前端接口神器json-server
简介 json-server 是一款小巧的接口模拟工具,一分钟内就能搭建一套 Restful 风格的 API,尤其适合前端接口测试使用。 只需指定一个 json 文件作为 api 的数据源即可,使用起来非常方便,30秒入门,基本上有手就行。 进阶…...
国产化:复旦微JFM7K325T +华为海思 HI3531DV200 的综合视频处理平台
板卡概述 TES714 是自主研制的一款 5 路 HD-SDI 视频采集图像处理平台,该平台采用上海复旦微的高性能 Kintex 系列 FPGA 加上华为海 思的高性能视频处理器 HI3531DV200 来实现。 华为海思的 HI3531DV200 是一款集成了 ARM A53 四核处理 器性能强大的神经网络引擎…...
Ceph入门到精通- stderr raise RuntimeError(‘Unable to create a new OSD id‘)
/bin/podman: stderr raise RuntimeError(Unable to create a new OSD id) podman ps |grep osd.0 podman stop osd.0 容器id 重新添加osd.0 集群目录 cd /var/lib/ceph/e8cde810-e4b8-11ed-9ba8-98039b976596/1109 ls1110 rm -rf osd.01111 ceph orch daemon add osd…...
AWSFireLens轻松实现容器日志处理
applog应用程序和fluent-bit共享磁盘,日志内容是json格式数据,输出到S3也是JSON格式 applog应用部分在applog目录: Dockerfile文件内容 FROM alpine RUN mkdir -p /data/logs/ COPY testlog.sh /bin/ RUN chmod 777 /bin/testlog.sh ENTRYP…...
Java程序设计入门教程--案例:自由落体
程序模拟物体从10000米高空掉落后的反弹行为。 球体每落地一次,就会反弹至原高度的一半。按用户输入的弹跳次数,计算球体每次弹跳的高度。 实现过程: 1. 新建项目; 2. 接收 用户输入的弹跳次数: (1&#…...
Qt音视频开发44-本地摄像头推流(支持分辨率/帧率等设置/实时性极高)
一、前言 本地摄像头推流和本地桌面推流类似,无非就是采集的设备源头换成了本地摄像头设备而不是桌面,其他代码完全一样。采集本地摄像头实时视频要注意的是如果设置分辨率和帧率,一定要是设备本身就支持的,如果不支持那就歇菜&a…...
SpringCloud学习(七)——统一网关Gateway
文章目录 1. 网关介绍2. 网关搭建2.1 引入依赖2.2 创建启动类2.3 编写配置2.4 测试 3. 路由断言工厂4. 路由过滤器4.1 过滤器配置4.2 全局过滤器4.3 过滤器执行顺序 5. 跨域问题处理 1. 网关介绍 到现在,我们可以使用Nacos对不同的微服务进行注册并管理配置文件&am…...
《花雕学AI》31:ChatGPT--用关键词/咒语/提示词Prompt激发AI绘画的无限创意!
你有没有想过用AI来画画?ChatGPT是一款基于GPT-3的聊天模式的AI绘画工具,它可以根据你输入的关键词/咒语/提示词Prompt来生成不同风格和主题的画作。Prompt是一些简短的文字,可以用来指导ChatGPT的创作过程。在这篇文章中,我将展示…...
计算机组成原理9控制单元的结构
9.1操作命令的分析 取值周期间址周期执行周期中断周期 取指周期数据流 PC存放下条指令的地址给MAR访问存储器相应单元,将数据取出来送给MDR寄存器,MDR取出来的内容送给IR指令寄存器,然后对指令进行译码,把指令的操作码部分取出…...
MySQL数据备份和恢复
MySQL数据备份和恢复 数据备份 mysqldump是MySQL数据库备份工具,可以备份MySQL数据库中的数据和结构,生成.sql文件,方便数据的迁移和恢复。 使用mysqldump工具前一定要配置环境变量 打开开始菜单,搜索“环境变量”。点击“编辑…...
数据结构与算法之链表: Leetcode 237. 删除链表中的节点 (Typescript版)
删除链表中的节点 https://leetcode.cn/problems/delete-node-in-a-linked-list/ 描述 有一个单链表的 head,我们想删除它其中的一个节点 node。 给你一个需要删除的节点 node 。你将 无法访问 第一个节点 head。 链表的所有值都是 唯一的,并且保证给…...
继承的相关介绍---C++
一、概念及定义 概念: 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结…...
Java多线程深入探讨
1. 线程与进程2. 创建和管理线程2.1. 继承Thread类2.2. 实现Runnable接口2.3 利用Callable、FutureTask接口实现。2.4 Thread的常用方法 3. 线程同步3.1. synchronized关键字3.1.1同步代码块:3.1.2 同步方法: 3.2. Lock接口 4. 线程间通信5. 线程池5.1 使…...
SpringCloud全面学习笔记之进阶篇
目录 前言微服务保护初识Sentinel雪崩问题及解决方案雪崩问题超时处理仓壁模式熔断降级流量控制总结 服务保护技术对比Sentinel介绍和安装微服务整合Sentinel 流量控制快速入门流控模式关联模式链路模式小结 流控效果warm up排队等待 热点参数限流全局参数限流热点参数限流案例…...
英语中主语从句的概念及其用法,例句(不断更新)
主语从句的原理 主语从句是一种充当整个句子主语的从句,主语从句构成的句子,是要以引导词开头的。它可以用名词性从属连词、关系代词或关系副词引导。主语从句通常位于谓语动词之前,用于表示动作、状态或事件的主体。 以下是一些常用的引导主…...
数组的子数组(亚阵列)、子序列,字符串的子串、子序列
数组 子数组 一个或连续多个数组中的元素组成一个子数组 子数组最少包含一个元素 数组 {1, 2, 3} 的子数组是 {1}, {1, 2}, {1, 2, 3}, {2}, {2, 3}, 和 {3}. 子序列 子序列就是在原来序列中找出一部分组成的序列 子序列不一定连续 相对位置还是不变 但是ÿ…...
MySQL 知识:迁移数据目录到其他路径
一、系统环境 操作系统:Centos 7 已安装环境:MySQL 8.0.26 二、开始操作 2.1 关闭SELinux 为了提高 Linux 系统的安全性,在 Linux 上通常会使用 SELinux 或 AppArmor 实现强制访问控制(Mandatory Access Control MACÿ…...
Go | 一分钟掌握Go | 8 - 并发
作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我! 前言 当今编程界,一个好的编译型语言如果不支持并发,…...
【滤波】多元高斯
本文主要翻译自rlabbe/Kalman-and-Bayesian-Filters-in-Python的第5章节05-Multivariate-Gaussians(多元高斯)。 %matplotlib inline#format the book import book_format book_format.set_style()简介 上一篇文章中的技术非常强大,但它们只…...
单源最短路问题
全部代码 全部代码在github acwing 上 正在更新 https://github.com/stolendance/acwing 图论 欢迎大家star与fork 单源最短路问题 先用spfa算法 不行再换其他的 spfa-超级万能 说不定比dijsktra还快 dis[] 代表第k到某一点的最短距离 queue 代表刚被更新的点 它有可能更…...
Security方法注解权限控制过程及自定义权限表达式
文章目录 使用内置的权限表达式PreAuthorizePermissionEvaluator 自定义权限表达式SysMethodSecurityExpressionHandler源码流程 SysMethodSecurityExpressionRoot 使用内置的权限表达式 PreAuthorize 这个用来判断超级管理员的话,还得在表达式上加上或 Permissi…...
vue 省市县三级联动
1、 <template><div>所在省<el-select popper-class"eloption" :popper-append-to-body"true"change"getShiList(obj.province)" v-model"obj.province" placeholder"请选择所在省" clearableclear"re…...
ChatGPT实现编程语言转换
编程语言转换 对于程序员来说,往往有一类工作,是需要将一部分业务逻辑实现从服务端转移到客户端,或者从客户端转移到服务端。这类工作,通常需要将一种编程语言的代码转换成另一种编程语言的代码,这就需要承担这项工作…...
浅拷贝和深拷贝
浅拷贝: 定义:浅拷贝(Shallow Copy)是一种简单的对象复制方式,将一个对象的数据成员直接复制给另一个对象(通常是通过默认的复制构造函数或赋值运算符实现),这些数据成员可以是基本…...
进程地址空间与页表方面知识点(缺页中断及写时拷贝部分原理)
谢谢阅读,如有错误请大佬留言!! 目录 谢谢阅读,如有错误请大佬留言!! 抛出总结 开始介绍 发现问题 进程地址空间(虚拟地址) 页表 物理内存与进程地址空间映射 缺页中断基本…...
Photoshop如何使用滤镜之实例演示?
文章目录 0.引言1.将普通照片制作成油画效果2.使用液化滤镜修出完美身材3.用镜头光晕滤镜制作唯美的逆光人像4.用Camera Raw滤镜对偏色风景照进行调色 0.引言 因科研等多场景需要进行绘图处理,笔者对PS进行了学习,本文通过《Photoshop2021入门教程》及其…...
Flutter 组件抽取:日期(DatePicker)、时间(TimePicker)弹窗选择器【仿照】
简介 仿照《Flutter 仿ios自定义一个DatePicker》实行的日期弹窗选择器(DatePicker)、时间弹窗选择器(TimePicker) 效果 范例 class _TestPageState extends State<TestPage> {overridevoid initState() {super.initStat…...
基于opencv的YOLOV3对图片的目标检测
目录 1. 准备工作 2. utils 函数 2.1 plot_show 函数 2.2 get_prediction 函数 2.3 draw_bounding_box 绘制边界框函数...
Mermaid流程图
所有流程图都由节点,几何形状和边缘,箭头或线条组成。mermaid代码定义了这些节点和边缘的制作和交互方式。 它还可以容纳不同的箭头类型、多方向箭头以及与子图之间的链接。 1、流程图的方向 TB - 从上到下TD - 自上而下/与上到下相同BT - 从下到上RL -…...
国产!全志科技T507-H工业核心板( 4核ARM Cortex-A5)规格书
1核心板简介 创龙科技 SOM-TLT507 是一款基于全志科技 T507-H 处理器设计的 4 核 ARM Cortex-A 53 全国产工业核心板,主频高达 1.416GHz 。核心板 CPU 、ROM 、RAM、电源、晶振等所有元器件均采用国产工业级方案,国产化率 100%。 核心板通过邮票孔连接方式引出 MIPI CSI 、…...
企业网站建设必要性/天津网络推广公司
原文地址:ELF文件在带加载器的OS中和裸奔的加载及运行 作者:lelee007 工作关系,这个周花了一天时间好好研究了以下ELF文件及可执行ELF文件的加载。中间过程可谓收获不小,呵呵,因为之前搞linux驱动、ARM裸奔始终没有认真…...
企业网站的建设过程/保定seo推广外包
class Solution:找到数组中结果与k接近的3个元素def threeSumClosest(self, numbers, target):# 排序numbers.sort()# 最接近的和ans None# 结果列表res []for i in range(len(numbers)):left, right i 1, len(numbers) - 1# 从i号位置开始搜索,i0时搜索右边所有…...
延边省建设局网站官网/app推广引流
之前在使用Ansible部署工具的时候,需要先配置好SSH免密登录,在配置时踩了很多的坑(按照很多文章的步骤并不能完全配置好免密登录),因此在踩完所有的坑之后,总结出来这篇文章。 生成公钥、私钥对 在中控机…...
自己给公司做网站/上海专业排名优化公司
在日常工作中,批量管理服务器是个力气活,如果人工一台一台处理,效率低下。此时,老外写的pssh工具实现了批量管理。http://www.theether.org/pssh/ 它的原理是先建立ssh私钥认证,然后用pssh工具批量管理。 下面…...
做简历的网站叫什么/seo如何提升排名收录
mysql主从配置1.1 部署环境主(master_mysql):192.168.56.5 OS:Centos 7.2从(slave_mysql):192.168.56.6 OS:Centos 7.21.2 配置1.2.1主配置(master_mysql配置)vi /etc/my.cnfserver-id5 #设置主服务器的ID(不能和别的服务器重复,建议使用ip的最后一段)innodb_flush_…...
百度推广 帮做网站吗/搜索引擎优化方案案例
记录 flutter 环境安装问题 问题描述 前提是 flutter 安装好,jdk 安装好,Android Studio 安装完成 flutter doctor 查看环境缺失,如下: [✓] Flutter (Channel stable, v1.7.8hotfix.4, on Mac OS X 10.14.6 18G95, localezh-H…...