Очень удобный местный макет

Node.js внешний интерфейс сервер JavaScript

1. Что такое макет

В сфере разработки программного обеспечения мы понимаем Mock как «симулированные данные» и «ложные данные».

Во-вторых, преимущества Mock

Есть много преимуществ, которые можно суммировать в одном предложении: с Mock персоналу внешнего и внутреннего интерфейса нужно только определить интерфейсный документ, чтобы начать работать параллельно, не влияя друг на друга.

3. Реализуйте мокап

локальная структура каталогов

Как мы развивались без реального интерфейса?

Шаг 1. Создайте веб-службу локально

Установите nodejs локально и настройте package.json:

{
  "name": "mock",
  "scripts": {
    "dev": "node server.js"
  },
  "dependencies": {},
  "devDependencies": {
    "express": "^4.14.1"
  }
}

Настройте server.js:

// 这里使用了express, 执行npm i express 或者 cnpm i express安装依赖
var express = require('express');
var app = express();

// 指定html
app.get('/index.html', function(req, res) {
  res.sendFile(__dirname + req.path);
});

// 监听端口
app.listen('3737', function () {
  console.log('localhost:3737/index.html');
});

Командная строка выполняет node serser.js, браузер открывает localhost:3737/index.html, и страница становится доступной.

Шаг 2. Настройте фиктивные данные

Изменить server.js

var express = require('express');
var app = express();

// 指定html
app.get('/index.html', function(req, res) {
  res.sendFile(__dirname + req.path);
});

// 配置Mock数据
var fs = require('fs');
app.post('/home', function(req, res) {
  res.setHeader('Content-Type', 'application/json; charset=utf-8');
  fs.readFile('./mock/home.json', function(err, data) {
    if (err) throw err;

    res.json(JSON.parse(data));
  });
});

// 监听端口
app.listen('3737', function () {
  console.log('localhost:3737/index.html');
});

Повторно запустив node serser.js из командной строки, мы обнаружили, что страница может получить доступ к интерфейсу «/home»;

Шаг 3: Оптимизация

Невозможно иметь только один интерфейс в проекте, для облегчения настройки в mock файл добавлен mock.js для унифицированной настройки.

/**
 * @note   setOnline 线上接口 配置
 * @param  name  本地接口名
 *         type  接口类型
 *         url   线上接口地址
 */
var fs = require('fs');
var setOnline = [
  {
    name: 'home',
    type: 'post',
    url: '/home'
  }
  // 第二个接口... 第三个接口
];

// 输出配置项
exports.setOnline = setOnline;

// 遍历输出json数据
for (var i = 0, len = setOnline.length; i < len; i++) {
  (function() {
    var name = setOnline[i].name;

    exports[name] = function(req, res) {
      res.setHeader('Content-Type', 'application/json; charset=utf-8');
      fs.readFile('./mock/' + name + '.json', function(err, data) {
        if (err) throw err;

        res.json(JSON.parse(data));
      });
    };
  })(i);
}

Изменить server.js

var express = require('express');
var app = express();

app.get('/index.html', function(req, res) {
  res.sendFile(__dirname + req.path);
});

// Mock数据
var mock = require('./mock/mock.js');
var setOnline = mock.setOnline;

setOnline.forEach(function(m) {
  app[m.type](m.url, mock[m.name]);
});

app.listen('3737', function () {
  console.log('localhost:3737/index.html');
});

Перезапустите веб-службу, и все готово.

4. Резюме

Существует множество способов реализации фиктивных данных, таких как mockjs, easymock, rap2 и так далее.

Характеристики локального мока не зависят от mockjs, easymock и т.п., его удобно и быстро реализовать.