现代化前端 Mock 数据的方案(MSW+faker.js)

前言

目前前端模拟数据除了通过一些接口调试工具来mock以外,偶尔使用express、nest之类,主要是用mock.js和better-mock,这两个本质是一个东西,后者是因为前者不维护而诞生出的一个分支,支持typescript。本文主要讲另外一种方式,就是通过msw和faker.js实现模拟。msw全称Mock Service Worker,是通过Worker实现的mock模拟前端接口返回。本方式相对来说比较新,也比较优雅。

基础配置

一、官网

MSW -- Seamless API mocking library for browser and Node | Mock Service Worker

二、安装

bash 复制代码
npm install msw --save-dev
# or
yarn add msw --dev

根据npm还是yarn包管理工具进行安装。

三、配置mock列表(./mock/handlers.js)

以下是我添加了单个的mock,实际上,你可以创建多个,方法是rest.post/get等..

req代表请求、res代表返回、ctx代表环境上下文(请求的一些数据)

javascript 复制代码
import { rest } from 'msw'


export const handlers = [
rest.post('/login', async (req, res, ctx) => {
    const { username } = await req.json()

    return res(
        ctx.status(200),
        ctx.delay(1000),
        ctx.json({
        username,
        firstName: 'John'
      })
    )
  }),]

通过ctx.status()可以设置接口返回状态码、通过ctx.delay()可以实现接口延迟,比如弱网测试

四、生成worker脚本

通过cli生成必要的依赖文件到public目录下。

javascript 复制代码
npx msw init <PUBLIC_DIR> --save

这里PUBLIC_DIR就是我们public文件夹的路径,Vite为public(绝大多数框架都是public)

javascript 复制代码
./public

所以,命令是

javascript 复制代码
npx msw init public/ --save

五、创建浏览器的worker

我们要测试是浏览器的环境,所以说需要创建一个浏览器worker:browser.js

javascript 复制代码
// src/mocks/browser.js
import { setupWorker } from 'msw'
import { handlers } from './handlers'

export const worker = setupWorker(...handlers)

六、引入main.js下进行挂载

javascript 复制代码
if (import.meta.env.MODE === 'development') {
  const { worker } = await import("./mock/browser");
  worker.start()
}

七、检查msw集成结果

控制台输出以下内容,代表msw启动成功

javascript 复制代码
[MSW] Mocking enabled

faker.js集成

一、安装依赖和导入

javascript 复制代码
npm install --save-dev @faker-js/faker


import { faker } from '@faker-js/faker';

二、使用简单的方法

javascript 复制代码
export const handlers = [
rest.post('/login', async (req, res, ctx) => {
    const { username } = await req.json()

    return res(
        ctx.status(200),
        ctx.delay(1000),
        ctx.json({
        username,
        firstName: faker.internet.userName()
      })
    )
  }),]

有关faker.js更多API请直接访问faker的git页面,查询。

相关推荐
IT_陈寒1 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰2 小时前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
山河木马2 小时前
渲染管线-计算得到gl_Position(顶点着色器)之后续GPU流程
javascript·webgl·图形学
竹林8182 小时前
用 The Graph 查询链上数据实战:从手搓 RPC 到 Subgraph,我的 NFT 项目数据加载快了 10 倍
前端·javascript
妙码生花3 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
Awu12273 小时前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude
咪库咪库咪4 小时前
Vue3-生命周期
前端
莪_幻尘4 小时前
你的 AI Skill 越多越蠢?Token 上下文爆炸的求生指南
前端·ai编程
lichenyang4535 小时前
从 has.echo 到异步 API 注册表:一次 ASCF API 回调不触发的排查复盘
前端
林瞅瞅5 小时前
Nuxt3 项目部署 Nginx 防盗链后特定 JS 文件 403 问题修复方案
前端