New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

mock-mini-server

Package Overview
Dependencies
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mock-mini-server

Mock + Express 简易配置本地假数据服务器

latest
Source
npmnpm
Version
1.1.0
Version published
Weekly downloads
2
Maintainers
1
Weekly downloads
 
Created
Source

mock-mini-server

Mock + Express 本地假数据服务器,数据文件格式直接采用Mock的语法,同时间,支持扩展Mock数据占位符

安装

npm install mock-mini-server

运行

  • 切换到需要运行本地服务器的根目录
cd dist
  • 生成配置文件mockhttp.js
mpck-mini-server init
  • 直接运行或者指定端口号,指定的端口号会覆盖mockhttp.js中配置的端口号
mock-mini-server 或者 mock-mini-server 8080

mockhttp.js配置

在开启服务器的根目录下面添加配置文件mockhttp.js,如不添加配置文件,则采用默认配置

配置项

属性类型默认值描述
defaultDataFile{String}静态数据文件名,,只支持js文件和json文件
baseDist{String}所有数据文件的根目录,可以是相对路劲也可以是绝对路径
port{Number}}10100本地服务器端口号
openBrowser{Boolean}false开启服务器是否自动打开浏览器
dev{Boolean}false是否是开发模式,用于打印对应的信息
middleWare{Function/Array/Object}Express中间件,可用于截获请求,实现自定义逻辑
mockExtend{Object}}{}Mock数据占位符扩展

defaultDataFile

对于没有特殊要求的数据可以直接写在一个文件上,减少数据文件的个数,易维护

defaultDataFile: 'index.json'

middleWare

截获http请求中间件,用于处理自定义的逻辑

middleWare: [Object/Array/Function]

Object

{
    middleWare: {
        api: 'xx', 
        callback: function (req, res, next, server){
            //截获请求,处理自定义逻辑
        }
    }
}

Array

{
    middleWare: [{
        api: 'xx',
        callback: function (req, res, next, server){
            //截获请求,处理自定义逻辑
        }
    }]
}

Function

{
    middleWare: function (req, res, next, server){
        //截获请求,处理自定义逻辑
    }
}

middleWare 参数说明

属性描述
apistring,需要截获的请求,支持glob
functionfunction,处理自定义逻辑

callback 参数说明

req, res, next具体的可以看Express中间件开发文档

  • 如果只是对请求的拦截附件处理,需要最后调用next(),以执行后续的逻辑,否则执行完回调立即停止

参数servermock-mini-server数据处理类MockServer的实例化对象,提供如下接口

  • option:当前mock-mini-server设置的配置信息
  • Mock: Mcok对象,可以直接调用server.Mock(template)根据模版生成数据
  • loadData(requestUrl): requestUrl为配置的数据模板对应的key值。根据请求的地址获取配置的数据模版生成的数据,并返回Promise。
  • updateData(requestUrl, data): requestUrl同上,data为对应的数据。更新当前已缓存的数据。

middlwWare调试说明

针对在vscode中进行调试说明,配置如下:

  • package.json添加如下配置
"scripts": {
    "mock": "node --inspect-brk=9229 ./mockDebug.js"
}

dist为需要开启mock-mini-server的文件夹的根目录 9229vsCode中的配置文件launch.json中自动生成的port

  • dist目录下面添加mockDebug.js
const mockServer = require('mock-mini-server');

mockServer.run();
  • vsCode中的配置文件launch.json添加如下配置

打开vscode的的配置文件launch.json,点击添加配置,选择通过 NPM 启动选项,生成如下配置,修改runtimeArgspackage.json中设置的scripts名称,本示例中是mock

{
    "type": "node",
    "request": "launch",
    "name": "run NPM",
    "runtimeExecutable": "npm",
    "runtimeArgs": [
        "run-script",
        "mock"
    ],
    "port": 9229
}

9229为vscode生成的监听端口号,两个地方需要保持一致

  • mockhttp.js文件中打上断点,然后开始调试,当命中middleWare中的规则时,断点处即可生效调试

Example

// Object格式
middleWare: {
    api: '/goform/module',
    callback: function(req, res, next, server) {
        server.log('中间件,劫持请求 /goform/module');
        server.loadData(req.path).then(result => {
            res.send(JSON.stringify(result));
            server.log(result);
        }).catch(err => {
            next();
        });
    }
}

// Array格式
middleWare: [
    {
        api: '/goform/module',
        callback: function(req, res, next, server) {
            server.log('中间件,劫持请求 /goform/module');
            server.loadData(req.path).then(result => {
                res.send(JSON.stringify(result));
                server.log(result);
            }).catch(err => {
                next();
            });
        }
    },
    {
        api: 'xxx',
        callback: function(){
            //xxx
        }
    }
    ...
]

// Function格式
middleWare: function(req, res, next, server){
    server.log('中间件,劫持请求 /goform/module');
    server.loadData(req.path).then(result => {
        res.send(JSON.stringify(result));
        server.log(result);
    }).catch(err => {
        next();
    });
}

mockExtend

mockExtend: {
    ip: function(iptext) {
        if (iptext === '' || iptext === undefined) {
            return `192.168.${this.integer(0, 255)}.${this.integer(1, 254)}`;
        }

        let ip = [];
        iptext += '';
        iptext.split('.').forEach(item => {
            item = item.split('-');
            ip.push(item.length > 1 ? this.integer(item[0], item[1]) : item);
        });

        return ip.join('.');
    },
    ......
}

完整示例如下:

module.exports = {
    defaultDataFile: 'index.json',
    baseDist: 'data',
    port: 8090,
    openBrowser: false,
    dev: false,
    /**
    * 中间件,拦截请求之类的操作
    * req: express请求参数, res:express返回参数, next:express传递, server: 当前数据操作的server对象
    * function(req, res, next, server)
    */
    middleWare: {
        api: '/goform/module',
        callback: function(req, res, next, server) {
            server.log('中间件,劫持请求 /goform/module');
            server.loadData(req.path).then(result => {
                res.send(JSON.stringify(result));
                server.log(result);
            }).catch(err => {
                next();
            });
        }
    },
    /**
    * Moc扩展
    */
    mockExtend: {
        ip: function(iptext) {
            if (iptext === '' || iptext === undefined) {
                return `192.168.${this.integer(0, 255)}.${this.integer(1, 254)}`;
            }

            let ip = [];
            iptext += '';
            iptext.split('.').forEach(item => {
                item = item.split('-');
                ip.push(item.length > 1 ? this.integer(item[0], item[1]) : item);
            });

            return ip.join('.');
        }
    }
};

数据文件配置项说明

配置项

属性类型默认值描述
delay{Number}0延迟返回数据,单位为毫秒,默认不延迟
refresh{Boolean}false每次请求接口,是否返回新的数据
template`{Objectfunction}}`

如果没有其他配置参数可省略template,直接返回template对应的值

js文件例子

module.exports = {
    // 有参赛配置
    getMess: {
        delay: 200,
        refresh: true,
        template: {
            'ID|+1': 1,
            'title': 'Demo',
            'mess': '★',
            'age|1-100': 100,
            'ip': '@IP',
            'ip1': '@IP("192.1-12.250-254.0")'
        }
    },
    // 无参数配置
    getData: {
        'ID|+1': 1,
        'title': 'Demo',
        'mess': '★',
        'age|1-100': 100,
        'ip': '@IP',
        'ip1': '@IP("192.1-12.250-254.0")'
    },
    // 函数模版
    getData: function(){
        return{
            a: 1
            ....
        }
    },
    // 异步数据
    getAsyncData: function(){
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(xxx);
            }, 0);
        });
    }
}

json文件例子

{
    "getMess": {
        "delay": 200,
        "template": {
            "title": "Syntax Demo1",
            "string1|1-10": "★",
            "string2|2-4": "LOVE*",
            "number1|+1": 100,
            "number2|1-100": 100,
            "number3|1-100.1-3": 1,
            "number4|123.1-10": 1,
            "number5|123.2": 1,
            "number6|123.4": 1.123
        }
    }
}

Keywords

mock

FAQs

Package last updated on 18 Jul 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts