前端项目mock本地数据

第一步,下载插件,我下载了以下几个插件
cross-env。 nodemon mockjs. klaw
第二步,在根目录新建mockSever文件夹

/**
 * Mock server
 */
const path = require('path')
const express = require('express')
const klaw = require('klaw') // 具有可读流接口的 Node.js 文件系统walker。 读取文件

const _ = require('lodash')// 工具类
const bodyParser = require('body-parser') // 解析请求参数

const methodFlag = ['$get', '$post'] // 请求方法
const mockDir = path.join(process.cwd(), 'mockSever/api') // mock的数据来源,目录结构

const routers = {

}

const mockFiles = []

let err

klaw(mockDir)
  .on('data', (file) => {
    if (path.extname(file.path) !== '.js') return
    mockFiles.push(file.path)
  })
  .on('end', () => {
    mockFiles.forEach((file) => {
      try {
        const router = require(file) // require mockServer文件夹下的文件
        // 在url相同,但methods方法不同,如(一个get、一个post),此时如果文件名相似,容易导致请求丢失,因为Object.assign会误认为这两个mock是相同,从而合并丢失
        Object.assign(routers, router)
      } catch (error) {
        err = error
        console.log(err)
      }
    })
    server(routers)
  })

function server(routers) {
  const app = express()

  const allowCrossDomain = function(req, res, next) {
    // 允许跨域
    res.header('Access-Control-Allow-Origin', '*')
    res.header('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With')
    res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS')
    next()
  }
  app.use(allowCrossDomain)
  // 处理请求体
  app.use(bodyParser.json())
  app.use(bodyParser.urlencoded({ extended: false }))

  Object.keys(routers).forEach(function(api) {
    const routeHander = routers[api]
    const routerInst = new express.Router()
    if (_.isFunction(routeHander)) {
      routerInst.use(api, routeHander)
    } else if (_.isObject(routeHander)) {
      // 如果存在$get/$post
      if (methodFlag.some(it => {
        return routeHander[it]
      })) {
        methodFlag.forEach(it => {
          const method = it.toLocaleLowerCase().replace('$', '')
          if (routeHander[it]) {
            if (_.isFunction(routeHander[it])) {
              routerInst[method](api, routeHander[it])
            } else if (routeHander[it]) {
              routerInst[method](api, (req, res, next) => {
                responseTo(res, api, method, routeHander[it])
                next()
              })
            }
          }
        })
      }
    }
    app.use('/', routerInst)
  })

  if (err) {
    app.use((req, res, next) => {
      return next(err)
    })
  }
// PROXY_TARGET 这个在env.development. 配置
  app.listen(process.env.PROXY_TARGET, () => {
    console.log(`Proxy at http://localhost:${process.env.PROXY_TARGET}`)
  })
}

function responseTo(res, api, method, data) {
  console.log(`${api}  ${method}`)
  res.json(data)// 解析返回数据,以json格式返回Promise
}

第三步,在package.json中配置

    "mock": "cross-env PROXY_TARGET=4009 nodemon -w ./mockSever ./mockSever/mock-server.js"
    "start": "npm run dev & npm run mock",

第四步,在mockSever 文件夹下新建 api文件夹,把要mock的接口数据写里面,下面我写个例子

module.exports = {
  '/www/login': {
    $post: {
      code: '000000',
      resultMsg: '处理成功',
      data: {
        code: '000000'
      }
    }
  }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue项目中,可以使用mock.js来模拟数据请求。引用\[1\]中提到,mock.js可以在后端没有提供接口的情况下,自己模拟一个mock接口去请求,并且可以返回你希望得到的随机数据。这对于本地开发和演示项目非常有用。引用\[2\]中提到,使用mock.js可以完全本地化实现数据,方便前端人员定义接口数据,并且可以配合后台人员进行开发。在Vue项目中,可以通过引入mock.js并定义mock接口来模拟数据请求。例如,可以在一个mock文件夹中创建一个mock.js文件,然后在该文件中定义接口和返回的数据。在Vue组件中,可以通过发送请求来获取mock数据。引用\[3\]中给出了一个示例,展示了如何使用mock.js来请求获取.json文件的数据。在该示例中,首先引入了mock-request工具和项目的设置文件,然后定义了一个tableData函数来发送请求并获取数据。这样,你就可以在Vue项目中使用mock.js来模拟数据请求了。 #### 引用[.reference_title] - *1* [【Vue】使用mock模拟数据](https://blog.csdn.net/ZHANGYANG_1109/article/details/124547442)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vue本地模拟服务器请求mock数据](https://blog.csdn.net/liyoro/article/details/119616107)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值