从零开始搭建React+TypeScript+webpack开发环境-自定义配置化的模拟服务器

技术栈

我们将使用Node.js和Express.js作为我们的后端框架,以及Node.js的文件系统(fs)模块来操作文件和文件夹。此外,我们将使用Node.js的require和delete require.cache来加载和更新模拟数据。

项目结构

首先,让我们定义一个简单的项目结构:

复制代码
- your-project/
  - mock/
    - api/
      - users.json
    - other/
      - products.json
  - server.js

在mock文件夹中,我们可以为不同的API接口创建不同的子文件夹,并在每个子文件夹中放置相应的JSON文件,以模拟不同的数据。然后,我们将在server.js文件中创建我们的配置化的模拟服务器。

代码示例

javascript 复制代码
const path = require('path');
const fs = require('fs');
const express = require('express');

function watchMockFiles(mockDirectory, mockData) {
  function watchDirectory(directory) {
    fs.watch(directory, (eventType, filename) => {
      if (filename.endsWith('.json')) {
        const mockPath = path.join(directory, filename);
        const mockKey = path.relative(mockDirectory, mockPath)
          .replace('.json', '')
          .replace(/\\/g, '/');
        delete require.cache[require.resolve(mockPath)];
        const jsonData = require(mockPath);
        mockData[mockKey] = jsonData;
        console.log(`Updated mock data for ${mockKey}`);
      }
    });

    fs.readdirSync(directory).forEach((file) => {
      const fullPath = path.join(directory, file);
      const stats = fs.statSync(fullPath);

      if (stats.isDirectory()) {
        watchDirectory(fullPath);
      }
    });
  }

  watchDirectory(mockDirectory);
}

function readMockFiles(mockDirectory) {
  const mockData = {};

  function traverse(directory) {
    const files = fs.readdirSync(directory);

    files.forEach((file) => {
      const fullPath = path.join(directory, file);
      const stats = fs.statSync(fullPath);

      if (stats.isDirectory()) {
        traverse(fullPath);
      } else if (file.endsWith('.json')) {
        const mockKey = path
          .relative(mockDirectory, fullPath)
          .replace('.json', '')
          .replace(/\\/g, '/');
        const jsonData = require(fullPath);
        mockData[mockKey] = jsonData;
      }
    });
  }

  traverse(mockDirectory);

  return mockData;
}

function configureMockDevServer({
  mockDirectory = path.resolve(__dirname, 'mock'),
  defaultResponseTime = 2000,
}) {
  const mockData = readMockFiles(mockDirectory);
  watchMockFiles(mockDirectory, mockData);

  const app = express();
  app.use('/api', (req, res) => {
    const url = req.originalUrl;
    const mockKey = url.replace('/api/', '');

    if (mockData[mockKey]) {
      const { responseTime = defaultResponseTime, statusCode = 200 } = mockData[mockKey];

      setTimeout(() => {
        res.status(statusCode).json(mockData[mockKey].data);
      }, responseTime);
    } else {
      res.status(404).json({ error: 'Mock data not found' });
    }
  });

  const port = 3000;
  app.listen(port, () => {
    console.log(`Mock server is running on port ${port}`);
  });
}

configureMockDevServer();

在上面的示例中,我们创建了一个配置化的模拟服务器。它递归遍历mock文件夹和子文件夹,监视JSON文件的更改,支持不同的响应时间和HTTP响应码,并通过Express.js提供API接口。

使用示例

要使用这个配置化的模拟服务器,只需运行server.js文件。它将在端口3000上启动服务器,可以通过访问http://localhost:3000/api/{mockKey}来模拟API请求,其中{mockKey}是JSON文件的相对路径。

例如,要获取users.json文件的数据,可以访问http://localhost:3000/api/users。你还可以为每个API接口配置不同的响应时间和HTTP响应码,以满足你的需求。

结语

创建一个配置化的模拟服务器是一个有用的工具,可以帮助前

端开发人员模拟不同的API请求,并为每个接口配置不同的响应时间和HTTP响应码。这个方案可以提高开发和测试效率,同时提供更多的控制和灵活性。

相关推荐
miofly19 小时前
GitHub 今日推荐|rea:用 MCP 把反编译器和 AI agent 接到一起的逆向工具
typescript·开源·github
ZoeLandia1 天前
React11:数据请求与 TanStack Query
前端·react.js·typescript·react
瓦瓦gogo1 天前
实习中接触前端开发后,我开始了解 React
前端·react.js·前端框架
康小旺2 天前
AI 写 Vue 总写成同一个味道:给它装 Skills,装的不是知识是边界
vue.js·typescript
星_离2 天前
《Ajax - 实战基础篇》
前端·ajax
ZoeLandia2 天前
React08:自定义 Hook
开发语言·前端·react.js·typescript
李纲明2 天前
WordPress 结账页一直转圈不跳支付:AJAX、缓存排除、支付回调和 REST 怎么逐层核
运维·ajax·缓存·wordpress·woocommerce·devdiy·结账
aloha_7893 天前
HTML、JavaScript 与 TypeScript 基础速查
javascript·typescript·html
空中湖4 天前
用 React 写数据大屏:为什么我不建议用图表库
前端·react.js·前端框架
离歌漠4 天前
《我用 Tauri 做了一个本地开发工具箱》
rust·typescript·vue