node+koa实现数据mock接口的方法


Posted in Javascript onSeptember 20, 2017

基于node+koa实现的mock数据接口,Koa需要v7.6.0以上node版本,低于此版本请先升级node

目录结构

node+koa实现数据mock接口的方法

// server.js
const Koa = require('koa');
const Router = require('koa-router');
const qs = require('qs');
const assert = require('assert');

const app = new Koa();
const router = new Router();

/**
 * 获取列表数据
 * @param {request} page 页数
 * @param {request} limit 每页数据条数
 * @param {response} errno 返回状态码 0 ==> 返回成功 1 ==> 有错误
 * @param {response} hasMore 是否有更多数据
 */
let listData = require('./mock/list/list.js');

router.get('/api/getlist/:page/:limit', function (ctx, next) {
  
  const page = ctx.params.page;
  const limit = ctx.params.limit;
  const maxPage = listData.length / limit;
  
  // 构造返回对象
  let res = {
    errno: 0,
    data: {
      hasMore: true,
      data: []
    }
  };

  // 如果超过最大页面数
  if ((page*1 + 1) >= maxPage) {
    res.data.hasMore = false;
  }
  res.data.data = listData.slice(page*limit, page*limit + limit);
   ctx.body = res;
});

/**
 * 获取详情数据
 * @param {request} id 商品id
 */
const detailData = require('./mock/detail/detail.js');

router.get('/api/getdetail/:id', function (ctx, next) {

  const id = ctx.params.id
  let res = {
    errno: 0,
    data: {
      data: []
    }
  }
  res.data.data = detailData;
  // todo...
  ctx.body = res;
});

/**
 * 提交评论
 * @param {request} id 用户id
 * @param {request} uid 商品id
 * @param {request} msg 评论内容
 */
router.post('/api/comment', function (ctx, next) {
  
  const params = qs.parse(ctx.req._parsedUrl.query);
  const id = params.id;
  const uid = params.uid;
  const msg = params.msg;
  if (id === undefined || uid === undefined || msg === undefined) {
    ctx.body = {
      errno: 1,
      msg: '缺少参数'
    }
  } else {
    // todo...
    ctx.body = {
      errno: 0,
      msg: '评论成功'
    }
  }
});

app
 .use(router.routes())
 .use(router.allowedMethods());
app.listen(3000);
console.log("server is running at http://localhost:3000/");

实际项目中,调用接口会遇到跨域的问题,解决的方式有多种,这里介绍如何在webpack中配置

module.exports = {
  ...

  devServer: {
    proxy: {
     // 将 `/api` 开头的 http 请求,都代理到 `localhost:3000` 上,由 koa 提供 mock 数据
     '/api': {
      target: 'http://localhost:3000',
      secure: false
     }
    }
    ...
  }
}

项目地址:https://github.com/daijingfeng/mock-server

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript支持firefox,ie7页面布局拖拽效果代码
Dec 20 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
Apr 02 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
Sep 10 Javascript
document.createElement()用法
Mar 13 Javascript
js菜单点击显示或隐藏效果的简单实例
Jan 13 Javascript
jquery通过ajax加载一段文本内容的方法
Jan 15 Javascript
javascript二维数组转置实例
Jan 22 Javascript
浅谈javascript构造函数与实例化对象
Jun 22 Javascript
JQuery中Ajax的操作完整例子
Mar 07 Javascript
js获取地址栏参数的两种方法
Jun 27 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
Jul 22 Javascript
Node.js操作MongoDB数据库实例分析
Jan 19 Javascript
详解angularjs popup-table 弹出框表格指令
Sep 20 #Javascript
ES6中Array.includes()函数的用法
Sep 20 #Javascript
微信小程序视图template模板引用的实例详解
Sep 20 #Javascript
highcharts 在angular中的使用示例代码
Sep 20 #Javascript
jQuery实现可兼容IE6的滚动监听功能
Sep 20 #jQuery
Bootstrap Table快速完美搭建后台管理系统
Sep 20 #Javascript
VUE页面中加载外部HTML的示例代码
Sep 20 #Javascript
You might like
PHP教程 变量定义
2009/10/23 PHP
PHP 递归效率分析
2009/11/24 PHP
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
2018/05/12 PHP
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
原生js实现的移动端可拖动进度条插件功能详解
2019/08/15 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
Python中的生成器和yield详细介绍
2015/01/09 Python
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
python使用matplotlib绘制折线图教程
2017/02/08 Python
Python登录并获取CSDN博客所有文章列表代码实例
2017/12/28 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
在python中安装basemap的教程
2018/09/20 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
大学自荐信
2013/12/12 职场文书
烹饪自我鉴定
2014/03/01 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
道歉的话语大全
2015/05/12 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技