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

技术栈

我们将使用Node.js和Express.js作为我们的后端框架,以及Node.js的文件系统(fs)模块来操作文件和文件夹。此外,我们将使用Node.js的requiredelete 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响应码。这个方案可以提高开发和测试效率,同时提供更多的控制和灵活性。

相关推荐
emojiwoo2 小时前
【前端基础知识系列六】React 项目基本框架及常见文件夹作用总结(图文版)
前端·react.js·前端框架
Orange3015114 小时前
《深入源码理解webpack构建流程》
前端·javascript·webpack·typescript·node.js·es6
Bug改不动了5 小时前
React Native 与 UniApp 对比
react native·react.js·uni-app
然我5 小时前
React 16.8:不止 Hooks 那么简单,这才是真正的划时代更新 🚀
前端·react.js·前端框架
OEC小胖胖5 小时前
【React Hooks】封装的艺术:如何编写高质量的 React 自-定义 Hooks
前端·react.js·前端框架·web
404_Not_Found117 小时前
用 react + ts 实现我的第一个 todoList
react.js
Ratten7 小时前
03.TypeScript 常见泛型工具详解
typescript
puppy0_07 小时前
Webpack 打包流程及 Hooks 汇总
前端·webpack·前端工程化
春日野柚7 小时前
前端打包优化分析
前端·webpack
木春8 小时前
React入门:构建你的第一个应用
前端·react.js