npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ymock

v1.4.2

Published

Simple, powerfull api mock

Downloads

9

Readme

ymock

NPM Version NPM Downloads

给我一个URL,返给你个JSON数据。 API documentation

ymock能做什么

  1. mock接口数据,并且支持mockjson模板;
  2. mock接口逻辑,根据请求不同进行不同的mock数据生成。

安装

预置条件

先安装nodejs

执行安装命令

$ npm install -g ymock

快速开始

  1. 创建ymock项目(当前工作目录是user/study/ymock)
$ ymock init demo1

执行成功后会在当前目录下创建demo1目录,并在在demo1目录里创建文件ymockcfg.js

module.exports = [
  {
  }
];

这个文件就是你生成JSON数据的配置文件了。

  1. 创建用户信息JSON数据 在ymockcfg.js同级目录中创建data目录,并创建json文件user.json:
{
  "name": "john",
  "age": "24"
}
  1. 在ymockcfg.js中添加请求匹配规则配置
module.exports = [
  {
    test: /user\.json/,
    respondWith: 'data/user.json'
  }
];
  1. 启动ymock服务:
$ ymock run
  1. 查看生成的JSON数据 在浏览器中输入地址:http://127.0.0.1:8080, 不出意外就可以看到输出的数据了。

细说ymockcfg.js

ymockcfg.js本质上就是一个nodejs模块(不过修改该文件,不用重启服务),该模块返回的是个数组,在数组中添加URL匹配规则以及对应的JSON数据。 数组的元素格式:

{
  test: /user\.json/,
  respondWith: 'data/user.json'
}

test属性

test属性定义URL匹配规则,目前该属性可取值为字符串,正则表达式和函数。

test取值—字符串

采用精确匹配策略,接着上面的举例,修改ymockcfg.js:

module.exports = [
	{
		test: 'http://127.0.0.1:8080/user.json',
		respondWith: 'data/user.json'
	}
];

只有当请求URL为http://127.0.0.1:8080/user.json时才能匹配。

test取值—正则表达式

采用正则匹配的方式,如【快速开始】的举例。

test取值—函数

会把请求对象(http.IncomingMessage)作为参数传给该函数,如果函数返回true则匹配成功,否则不匹配。这是最灵活的一种方式。 继续修改ymockcfg.js:

{
		test: function(req){
			// 你的逻辑
			return ~req.url.indexOf('user.json');	
		},
		respondWith: 'data/user.json'
}

respondWith属性

respondWith属性定义JSON数据生成方式:

  1. 如果respondWith取值为number, null, boolean, undefined, Object,则直接返回该数据;
  2. 如果respondWith取值为String
  • 如果该字符串以'.json'或者'.mockjson'结尾,则视为文件,读取该文件并把文件内容返回;
  • 其他则作为普通字符窜返回。
  1. 如果respondWith取值为Function,则调用该函数。

respondWith取值—普通字符串

respondWith可以取值字符串,此时作为text/plain格式字符串返回的。 修改ymockcfg.js:

module.exports = [
	{
		test: function(req){
			// 你的逻辑
			return ~req.url.indexOf('user.json');	
		},
		respondWith: 'hi ymock!'
	}
];

respondWith取值—JSON文件字符串

如果字符串以".json"结尾则认为是相对于当前目录的JSON文件。如【快速开始】举例。

respondWith取值—mockjson文件字符串

如果字符串以".mockjson"结尾则认为是相对于当前目录的MockJSON文件。 继续上面的举例(此时要mock 5条用户数据的列表),在data目录添加userlist.mockjson文件(mockJSON语法):

{
	"data|5-5": [
		{
			"name": "@MALE_FIRST_NAME",
			"age|20-24": 0
		}
	]
}

修改ymockcfg.js:

module.exports = [
	{
		test: function(req){
			// 你的逻辑
			return ~req.url.indexOf('user.json');	
		},
		respondWith: 'hi ymock!'
	},
	{
		test: /userlist\.json/,
		respondWith: 'data/userlist.mockjson' // 返回mockjson文件
	}
];

在浏览器中访问http://127.0.0.1:8080/userlist.json,会发现生产5跳数据。

respondWith取值—函数

如果你想更加自由的控制mock的数据,那就给respondWith赋值个函数吧。此时会把函数的返回值作为mock数据。不过你也可以不返回数据,直接在函数中操作res来确定返回值(本质是个中间件)。 先来个栗子(根据请求参数决定mock数据)。修改ymockcfg.js:

module.exports = [
	{
		test: /user\.json/,
		respondWith: function(req, res){
			return {
				name: req.query.name
			}
		}
	}
];

访问http://127.0.0.1:8080/user.json?name=john,则输出:

{ 
  name: "john"
}

根据请求中QueryString的参数不同,而输出的mock数据也不同。

respondWith函数的形参(req, res, next)

respondWidth的函数本质是个中间件,参数同中间件的形参。

respondWith函数返回值

返回值如果返回值是以".json"或者".mockjson"结尾的字符串,则视为相对于当前目录的JSON文件,

module.exports = [
	{
		test: /user\.json/,
		respondWith: function(){
			return 'data/user.json'; // 返回json文件名称字符串
		}
	}
];

同理如果以”.mockjson"结尾的字符串则视为相对于当前目录的mockjson文件:

module.exports = [
	{
		test: /user\.json/,
		respondWith: function(){
			return 'data/userlist.mockjson';
		}
	}
];

支持异步

支持respondWith是个异步函数,可以用来模拟接口耗时等。

module.exports = [
	{
		test: /user\.json/,
		respondWith: function(req, res){
			return new Promise(resolve => {
        setTimeout(() => {
          resolve('data/userlist.mockjson');
        }, 2000)
      })
		}
	}
];

ymock命令介绍

执行命令可以查看ymock命令的帮助:

$ ymock -h

init

执行下面命令查看init子命令的帮助

$ ymock init -h

run -p [port]

执行下面命令查看run子命令的帮助

$ ymock run -h

结束语

如果你有兴趣欢迎添砖加瓦!