当前位置:首页 > 技术 > 正文内容

使用Vue CLI模拟后端API交互

访客 技术 2026年11月6日 4

在前端开发过程中,模拟后端API进行数据交互是常见的需求。本文将介绍如何使用Vue CLI来配置模拟数据接口,主要有两种方法:使用json-server和express。

引入Vue Resource

首先,我们需要在项目中引入vue-resource组件来处理HTTP请求。如果尚未安装,请执行以下命令:

npm install vue-resource --save

然后在项目的入口文件(通常是main.js)中引入并使用它:


import VueResource from 'vue-resource';
Vue.use(VueResource);

组件中的HTTP请求

在Vue组件中,你可以使用this.$http来发起GET或POST请求。例如:


// 在Vue组件的methods中
methods: {
  fetchData() {
    // GET 请求示例
    // this.$http.get('/api/getList')
    //   .then(response => {
    //     console.log('Success:', response.data);
    //   }, response => {
    //     console.error('Error:', response.statusText);
    //   });

    // POST 请求示例 (带参数)
    this.$http.post('/api/getUserInfo', { userId: 123 })
      .then(response => {
        console.log('Success:', response.data);
      }, response => {
        console.error('Error:', response.statusText);
      });
  }
}

方法一:使用 json-server

json-server是一个快速创建RESTful API的工具,非常适合模拟数据。

1. 安装 json-server

npm install json-server --save

2. 配置 webpack 开发服务器

在Vue CLI 2.x中,模拟API的配置通常放在build/dev-server.js。但在Vue CLI 3.x及更高版本,相关配置已迁移至build/webpack.dev.conf.js。请将以下代码添加到该文件的末尾:


// json-server 配置
const jsonServer = require('json-server');
const apiServer = jsonServer.create();
const apiRouter = jsonServer.router('db.json'); // db.json应与public同级
const middlewares = jsonServer.defaults();

apiServer.use(middlewares);
apiServer.use('/api', apiRouter); // 所有/api开头的请求都由json-server处理

apiServer.listen(3000, () => {
  console.log('JSON Server is running on port 3000');
});

3. 创建数据源 (db.json)

在项目根目录下创建一个名为db.json的文件,作为你的模拟数据源。例如:


{
  "newsList": [
    {
      "id": 1,
      "title": "Vue CLI 模拟数据示例一",
      "url": "http://example.com/news/1"
    },
    {
      "id": 2,
      "title": "Vue CLI 模拟数据示例二",
      "url": "http://example.com/news/2"
    },
    {
      "id": 3,
      "title": "Vue CLI 模拟数据示例三",
      "url": "http://example.com/news/3"
    }
  ],
  "userProfile": {
    "id": 101,
    "name": "模拟用户",
    "email": "user@example.com"
  }
}

4. 配置代理解决跨域问题

由于前端开发服务器(通常是8080端口)和模拟API服务器(3000端口)不在同一端口,需要配置代理来解决跨域问题。修改config/index.js文件,在dev配置中添加proxyTable:


// config/index.js
module.exports = {
  dev: {
    // ...其他配置
    proxyTable: {
      '/api': {
        target: 'http://localhost:3000', // 指向你的json-server运行地址
        changeOrigin: true,
        pathRewrite: {
          '^/api': '' // 将/api替换为空,使得请求可以正确匹配到json-server的路由
        }
      }
    },
    // ...其他配置
  }
}

5. 运行和访问

重新运行开发服务器(npm run dev)。现在,你可以通过访问http://localhost:8080/api/newsList来获取db.json中newsList的数据。

方法二:使用 Express

Express 是一个流行的 Node.js Web 应用框架,也可以用来创建更复杂的模拟API服务器。

1. 配置 webpack 开发服务器

在build/webpack.dev.conf.js文件的顶部引入express,并在文件末尾添加以下Express服务器配置:


// build/webpack.dev.conf.js

// ... 文件顶部引入 express
const express = require('express');
// ...

// express 配置 server
const apiServer = express();
const bodyParser = require('body-parser');
apiServer.use(bodyParser.urlencoded({ extended: true }));
apiServer.use(bodyParser.json());
const apiRouter = express.Router();
const fs = require('fs');

apiRouter.route('/:apiName') // 接口路径,例如 /api/newsList
  .all((req, res) => {
    fs.readFile('./db.json', 'utf8', (err, data) => {
      if (err) {
        console.error('Error reading db.json:', err);
        res.status(500).send('Server error');
        return;
      }
      try {
        const jsonData = JSON.parse(data);
        const apiName = req.params.apiName;
        if (jsonData[apiName]) {
          res.json(jsonData[apiName]);
        } else {
          res.status(404).send('API not found');
        }
      } catch (parseErr) {
        console.error('Error parsing db.json:', parseErr);
        res.status(500).send('Server error');
      }
    });
  });

// 挂载API路由到 /api 前缀
apiServer.use('/api', apiRouter);

// 监听端口
apiServer.listen(3000, (err) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Express API Server is listening at http://localhost:3000\n');
});

// ... 文件末尾的webpack dev server配置

2. 创建数据源 (db.json)

与方法一相同,创建一个db.json文件作为数据源。

3. 配置代理

同样需要配置config/index.js中的proxyTable来解决跨域问题,配置方式与方法一相同。

4. 访问数据

重新运行npm run dev。你可以通过http://localhost:8080/api/newsList访问模拟的数据。

通过以上两种方法,你可以有效地在Vue项目中模拟后端API,从而在前端开发阶段独立进行功能开发和测试。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。