1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yi-ge-koa2-API-scaffold

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Конструкция Koa2 RESTful API сервера

Это легковесная конструкция сервера RESTful API на основе Koa2, поддерживающая ES6.

Примечание: Из-за обновления версии Koa до Yöntem 2.3.0+, требуется Node.js версии не ниже v8.0.0 (рекомендовано v11.13.0), NPM версии не ниже v5.0.0. Рекомендуется использовать yarn вместо npm.

Данные передаются в JSON формате. POST, PUT, DELETE методы поддерживают тип контента application/x-www-form-urlencoded, multipart/form-data, application/json. Поддерживается конфигурация CORS. Для отправки данных, кроме загрузки файлов, рекомендуется использовать application/x-www-form-urlencoded. Обычно данные возвращаются в формате JSON с типом контента application/json.

Поддерживаются нереляционные базы данных, такие как Redis. В связи с потребностями разработки RESTful API сервера используется Sequelize.js как ORM для реляционных баз данных PostgreSQL, MySQL, MariaDB, SQLite, MSSQL. Если ORM для реляционных баз данных не нужен, выполните команду npm remove sequelize -S и удалите файл src/lib/sequelize.js.

Эта конструкция установлена с минимальным набором плагинов, совместимых с Koa2, необходимых для создания RESTful API сервера, каждый из которых имеет описание. Используется ESLint для проверки синтаксиса.Поскольку эта конструкция предназначена для предоставления RESTful API, она пока не рассматривает обработку статических ресурсов для фронтенда, предоставляя лишь базовый метод доступа к статическим ресурсам для удобства доступа к пользователям загруженным на сервер изображениям и другим ресурсам. Базовая структура директорий совпадает со структурой vue-cli, что позволяет использовать её вместе с фреймворками React, AngularJS и Vue.js. При использовании Cordova/PhoneGap, Electron необходимо включить поддержку CORS.Отказ от ответственности: Эта конструкция предоставляет базовое окружение для удобства разработки. Любой человек или организация могут свободно клонировать и использовать её. Использование введенных фреймворков требует соблюдения условий лицензий авторов этих фреймворков (частичный список и источники приведены ниже). Автор не несет никакой юридической ответственности за любые последствия использования этой конструкции, использование которой означает согласие с этим положением.

На данный момент модуль тестирования не включен, но будет добавлен в следующей версии вместе с интегрированным решением. Рекомендуется самостоятельно интегрировать Jest.

Конструкция SSR на основе Vue 2, Webpack 4, Koa 2: https://github.com/yi-ge/Vue-SSR-Koa2-Scaffold.

Инструкции по разработке

$ git clone https://github.com/yi-ge/koa2-API-scaffold.git

$ cd koa2-API-scaffold
$ npm install
$ npm run dev # Можно выполнить npm start для пропуска проверки ESLint.

Доступ: http://127.0.0.1:3000/

Отладка

$ npm run dev --debug

Или

$ npm start --debug

Поддерживает встроенную отладку Node.js: https://nodejs.org/api/debugger.html

Настройка окружения разработки

Создает исполняемые файлы Node.js в директорию dist:

$ npm run build
$ npm run production # запуск в режиме производства

Или

$ node dist/app.js

Настройка PM2Пример конфигурации для запуска сервера RESTful API с помощью PM2 находится в файле "pm2.js".

$ pm2 start pm2.js

Настройка PM2 совместно с Docker: http://pm2.keymetrics.io/docs/usage/docker-pm2-nodejs/

Настройка Docker

$ docker pull node
$ docker run -itd --name RESTfulAPI -v $(pwd):/usr/src/app -w /usr/src/app node node ./dist/app.js

Проверьте успешность запуска и состояние работы командой docker ps

Прямое выполнение приложения в фоновом режиме на Linux/Mac

Когда требуется простота, можно сделать так:

$ nohup node ./dist/app.js > logs/out.log &

Проверьте состояние работы (если есть node app.js, значит приложение работает в фоновом режиме):

$ ps aux | grep app.js

Просмотрите логи работы

$ cat logs/out.log

Мониторинг состояния работы

$ tail -f logs/out.log

Настройка Vue-cli

После выполнения npm run build в проекте Vue-cli (Vue2) все статические файлы будут созданы в директории dist. Рекомендовано использовать Nginx для управления статическими ресурсами для достижения наилучших результатов, а затем запустить RESTful API сервер любым из вышеописанных способов. Передняя и задняя части полностью разделены, обратите внимание на настройку CORS в конфигурационном файле Koa2 RESTful API Server.

Рекомендованная конфигурация Nginx:

server
{
    listen 80;
    listen [::]:80;
    server_name abc.com www.abc.com; # привязка домена
    index index.html index.htm;
    root  /www/app/dist; # директория dist после компиляции Vue-cli

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
    }
}
``````markdown
## Настройки времени жизни кэша

```nginx
    location ~ .*\.(js|css)$ {
        expires      12h;
    }

    location ~ /.* {
        deny all;
    }

    access_log off; # путь к журналу доступа
}

Запуск Nginx в контейнере Docker

(укажите имя файла конфигурации Nginx в каталоге nginx_config):

$ docker run -itd -p  Yöntem:80 -p 443:443 -v $(pwd)/nginx_config:/etc/nginx/conf.d nginx

Особое примечание о работе с токенами (JWT аутентификация)

В файле src/app.js присутствует следующий код:

.use(jwt({ secret: publicKey }).unless({ path: [/^\/public|\/user\/login|\/assets/] }))

Путь в массиве path, начинающийся с указанных значений, не требует аутентификации, все остальные пути должны проходить через процесс аутентификации.

Пример решения для фронтенда

import axios from "axios";
import { getToken } from "./tool";

const DevBaseUrl = "http://127.0.0.1:8080";
const ProdBashUrl = "https://xxx.xxx";

let config = {
  baseURL: process.env.NODE_ENV !== "production" ? DevBaseUrl : ProdBashUrl // Конфигурация API адреса
};

let token = getToken();
if (token) {
  config.headers = { Authorization: "Bearer " + token };
}

let request = axios.create(config);

// HTTP запросы
axios.interceptors.request.use(
  config => {
    if (window) {
      let token = getToken();
      if (token) {
        // Проверка наличия токена, если он существует, то каждый HTTP заголовок будет содержать токен
        config.headers.Authorization = `Bearer ${token}`;
      }
    }
    // if (config.method === 'get') {
    //   config.url = config.url + 'timestamp=' + Date.now().toString()
    // }
    return config;
  },
  err => {
    return Promise.reject(err);
  }
);

export default request;

```Файл tool.js:

// Saving cookies
export const setCookie = function setCookie(name, value, time) {
  if (time) {
    let strsec = getsec(time);
    let exp = new Date();
    exp.setTime(exp.getTime() + parseInt(strsec));
    document.cookie = name + "=" + encodeURIComponent(value) + ";expires=" + exp.toGMTString();
  } else {
    document.cookie = name + "=" + encodeURIComponent(value);
  }
};
```// Чтение cookie
```javascript
export const getCookie = function getCookie(name) {
  let reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
  let arr = document.cookie.match(reg);
  return arr ? decodeURIComponent(arr[2]) : null;
};

// Удаление cookie

export const delCookie = function delCookie(name) {
  var exp = new Date();
  exp.setTime(exp.getTime() - 1);
  var cval = getCookie(name);
  if (cval !== null) {
    document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
  }
};

// Получение токена

export const getToken = function getToken() {
  if (window.sessionStorage && window.sessionStorage.Bearer) {
    return window.sessionStorage.Bearer;
  } else if (window.localStorage && window.localStorage.Bearer) {
    return window.localStorage.Bearer;
  } else if (window.document.cookie) {
    return getCookie("Bearer");
  }
};
# Установка токена
```javascript
export let setToken = function(token, rememberTime) {
  if (window.sessionStorage) {
    window.sessionStorage.Bearer = token;
  }

  if ((rememberTime && window.localStorage) || !window.sessionStorage) {
    window.localStorage.Bearer = token;
  }

  if (
    window.document.cookie && !window.sessionStorage && !window.localStorage
  ) {
    if (rememberTime) {
      setCookie("Bearer", token, rememberTime);
    } else {
      setCookie("Bearer", token);
    }
  }
};

Удаление токена

export let delToken = function() {
  if (window.sessionStorage && window.sessionStorage.Bearer) {
    window.sessionStorage.removeItem("Bearer");
  }

  if (window.localStorage && window.localStorage.Bearer) {
    window.localStorage.removeItem("Bearer'");
  }

  if (window.document.cookie) {
    delCookie("Bearer");
  }
};

Основной принцип:

Получаем токен после успешного запроса API (обычно это аутентификация), сохраняем его локально и при каждом запросе передаем в заголовке Authorization: "Bearer " + token. Обычно нет необходимости беспокоиться о раскрытии локального токена.#### Введение плагинов

Введенные плагины:

koa@2 koa-body@2 koa-router@next koa-static2 koa-compose require-directory babel-cli babel-register babel-plugin-transform-runtime babel-preset-es2015 babel-preset-stage-2 gulp gulp-eslint eslint eslint-config-standard eslint-friendly-formatter eslint-plugin-html eslint-plugin-promise nodemailer promise-mysql и т.д.koa2: HTTP-фреймворк
    Краткое описание: HTTP-фреймворк.
    Источник: https://github.com/koajs/koa v2

koa-body: парсер данных формы
    Краткое описание: Полнофункциональный средний слой парсера данных формы для koa.
    Источник: https://github.com/dlau/koa-body

koa-router: маршрутизация для koa
    Краткое описание: Средний слой маршрутизации для koa.
    Источник: https://github.com/alexmingoia/koa-router/tree/master/

koa-static2: средний слой для обслуживания статических ресурсов
    Краткое описание: Средний слой для Koa2 для обслуживания папки с названием, указанного пользователем.
    Источник: https://github.com/Secbone/koa-static2

koa-compose: объединение нескольких средних слоев в один
    Краткое описание: Объединяет несколько средних слоев в один.
    Источник: https://github.com/koajs/compose

require-directory: рекурсивное прохождение через указанный каталог
    Краткое описание: Рекурсивное прохождение через указанный каталог.
    Источник: https://github.com/troygoode/node-require-directory

babel-cli: компиляция кода ES6 в ES5
    Резюме: Babel — это JavaScript-компилятор, который преобразует код ES6 в ES5.
    Источник: https://github.com/babel/babel/tree/master/packages/babel-cli

babel-register: реальная-time компиляция ES6 кода с помощью Babel
    Резюме: Babel-хук.
    Источник: https://github.com/babel/babel/tree/master/packages/babel-cli**babel-plugin-transform-runtime**: Конфигурация зависимостей для ES6 с помощью Babel
babel-preset-es2015: То же самое
babel-preset-stage-2: То же самое

gulp: Автоматизация сборки на основе потока данных
 Резюме: Gulp — это набор инструментов для автоматизации трудоёмких или времязатратных задач.
 Источник: https://github.com/gulpjs/gulp

gulp-eslint: плагин проверки ESLint для Gulp
 Резюме: Плагин для Gulp, использующий ESLint.
 Источник: https://github.com/adametry/gulp-eslint

gulp-nodemon: Автоматический перезапуск приложения после изменения JS кода
 Резюме: Nodemon отслеживает файлы в директории, где был запущен nodemon, и если какие-либо файлы изменятся, nodemon автоматически перезапускает ваше приложение на Node.js.
 Источник: https://github.com/remy/nodemon

eslint: Инструмент проверки синтаксиса JavaScript
 Резюме: Полностью модульный инструмент для выявления и отчета о шаблонах в JavaScript.
 Источник:

eslint-config-standard: конфигурация ESLint
 Резюме: Разделённая конфигурация ESLint для стиля JavaScript Standard.
 Источник: https://github.com/feross/eslint-config-standard

eslint-friendly-formatter: удобство вывода сообщений ESLint в Sublime Text или iTerm2, а также плагины ESLint для Atom
 Резюме: Простой форматтер/отчёт для ESLint, который удобен для использования в Sublime Text и iTerm2 'переход к открытию файла'.
 Источник: https://github.com/royriojas/eslint-friendly-formatter**eslint-plugin-html**: Проверка правил синтаксиса JavaScript в HTML файлах
 Резюме: Плагин ESLint для извлечения и проверки скриптов из HTML файлов.
 Источник: https://github.com/BenoitZugmeyer/eslint-plugin-html**eslint-plugin-promise**: Проверка JavaScript промисов
 Резюме: Обеспечивает лучшие практики для JavaScript промисов.
 Источник: https://github.com/xjamundx/eslint-plugin-promise

eslint-plugin-standard: Зависимости ESLint
 Резюме: Правила ESLint для стандартного линтера.
 Источник: https://github.com/xjamundx/eslint-plugin-standard

nodemailer: Отправка электронной почты
 Резюме: Отправка электронных писем с помощью Node.JS.
 Источник: https://github.com/nodemailer/nodemailer

promise-mysql: Библиотека для работы с базой данных MySQL
 Резюме: Promise Mysql.
 Источник: https://github.com/lukeb-uk/node-promise-mysql

sequelize: Объектно-реляционное отображение (ORM) для работы с базами данных
 Резюме: Sequelize — это объектно-реляционное отображение (ORM) на основе промисов для Node.js.
 Источник: https://github.com/sequelize/sequelize

mysql: Библиотека для работы с базой данных MySQL
 Резюме: Чистый клиент node.js на языке JavaScript, реализующий протокол MySQL.
 Источник: https://github.com/mysqljs/mysql

Список middleware для поддержки Koa2: https://github.com/koajs/koa/wiki

Другие часто используемые плагины для Koa2:

koa-session2: Middleware для управления сессиями
 Резюме: Middleware для Koa2 для получения/установки сессий.
 Источник: https://github.com/Secbone/koa-session2

koa-nunjucks-2:
Шаблонизатор Nunjucks, который можно использовать как в frontend, так и в backend: https://github.com/mozilla/nunjucks

koa-favicon:
Middleware favicon для Koa: https://github.com/koajs/favicon**koa-server-push**:
Middleware HTTP2 push: https://github.com/silenceisgolden/koa-server-push

koa-convert: Преобразование старых middleware для поддержки Koa2
 Резюме: Преобразует middleware на основе генераторов Koa в middleware на основе промисов.
 Источник: https://github.com/koajs/convert

koa-logger: Middleware для вывода логов запросов
 Резюме: Middleware для вывода логов в режиме разработки для Koa.
 Источник: https://github.com/koajs/logger

koa-onerror:
Middleware для перехвата ошибок Koa
 Источник: https://github.com/koajs/onerror

koa-multer: Middleware для обработки данных
 Резюме: Multer — это middleware для обработки multipart/form-data для Koa.
 Источник: https://github.com/koa-modules/multerОписание структуры директорий ------------```bash . ├── README.md ├── .babelrc # Конфигурационный файл Babel ├── .editorconfig # Файл с определением стилей редактора ├── .eslintignore # Файл со списком игнорируемых ESLint ├── .eslintrc.js # Конфигурационный файл ESLint ├── .gitignore # Файл со списком игнорируемых Git ├── gulpfile.js # Конфигурационный файл Gulp ├── package.json # Описание пакета ├── pm2.js # Пример конфигурации PM2 ├── build # Входной каталог сборки │ └── dev-server.js # Входной файл для реального времени компиляции в среде разработки ├── src # Каталог исходного кода, скомпилированный код находится в каталоге dist │ ├── app.js # Входной файл │ ├── config.js # Основной конфигурационный файл (ОБРАТИТЕ ВНИМАНИЕ! ДАННЫЙ ФАЙЛ СОДЕРЖИТ ЧУТЬ ЛИ НЕГОСПРИЯТНУЮ ИНФОРМАЦИЮ!) │ ├── plugin # Каталог плагинов │ │ └── smtp_sendemail # Пример плагина - отправка электронной почты │ ├── tool # Каталог инструментов │ │ ├── PluginLoader.js # Инструмент загрузки плагинов │ │ └── Common.js # Пример плагина - отправка электронной почты │ ├── lib # Каталог библиотек │ ├── controllers # Контроллеры │ ├── models # Модели │ ├── routes # Роуты │ └── services # Услуги ├── assets # Каталог статических ресурсов └── logs # Каталог логов

--------------------------------------------``````python
import Vue from 'vue'
import axios from 'axios'

const DevBaseUrl = 'http://127.0.0.1:3000'
const ProdBashUrl = 'https://api.xxx.com'

let config = {
 baseURL: process.env.NODE_ENV !== 'production' ? DevBaseUrl : ProdBashUrl # Настройка адреса API
}

if (process.env.VUE_ENV !== 'server') {
 let token = getToken() # Этот метод следует реализовать самостоятельно
 if (token) {
   config.headers = {'Authorization': 'Bearer ' + token}
 }
}

let request = axios.create(config)

# HTTP запросы - интерцепторы
axios.interceptors.request.use(
 (config) => {
   if (window) {
     let token = getToken()
     if (token) { # Проверка наличия токена, если он существует, то каждый HTTP заголовок будет содержать токен
       config.headers.Authorization = `Bearer ${token}`
     }
   }
   return config
 },
 (err) => {
   return Promise.reject(err)
 }
)

Vue.prototype.$request = request
```

Примеры вызова RESTful API различными популярными фреймворками (для справки)
------------------------------------------------------------------------------

### AngularJS (Ionic аналогичен)

```python
$http({
   method: 'post',
   url: 'http://localhost:3000/xxx',
   data: {para1:'para1',para2:'para2'},
   headers: {
       'Content-Type': 'application/x-www-form-urlencoded'
   }
}).success(function (data) {
}).error(function (data) {
})
```

### jQuery

```python
$.ajax({
 cache: false,
 type: Yöntem: 'POST',
 url: 'http://localhost:3000/xxx',
 data: {
     para1: para1
 },
 async: false,
 dataType: 'json',
 success: function (result) {
 },
 error: function (err) {
     console.log(err)
 }
})

# Загрузка файла
# Создание объекта FormData
var data = new FormData()
# Добавление данных в объект FormData
#
$.each($('#inputfile')[0].files, function (i, file) {
 data.append('upload_file', file)
})
$.ajax({
 url: 'http://127.0.0.1:3000/api/upload_oss_img_demo',
 type: 'POST',
 data: data,
 cache: false,
 contentType: false,    # Необходимо
 processData: false,    # Необходимо
 success: function (data) {
   console.log(data)
   if (data.result === 'ok') {
     $('#zzzz').attr('src', data.img_url)
   }
})
```  }
})
```

### MUI

```python
mui.ajax({ url: 'http://localhost:3000/xxx', dataType: 'json',
 success: function(data) {

 },
 error: function(data) {
     console.log('ошибка!')
 }
})
```

### JavaScript

```  
 var xhr = new XMLHttpRequest();
 xhr.open('POST', 'http://localhost:3000/xxx', true); // POST или GET, true (асинхронный) или false (синхронный)
 xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
 xhr.withCredentials = true;
 xhr.onreadystatechange = function () {
     if (xhr.readyState === 4 && (xhr.status === 200 || xhr.status === 304)) {
         var gotServices = JSON.parse(xhr.responseText);
     } else {
         console.log('AJAX запрос завершился с ошибкой');
     }
 };
 xhr.send({para1: para1});
```

### vue-resource

https://github.com/pagekit/vue-resource

```  
// глобальный объект Vue
Vue.http.post('/someUrl', [body], {
 headers: {'Content-type', 'application/x-www-form-urlencoded'}
}).then(successCallback, errorCallback);
```

### fetch

https://github.com/github/fetch

```  
fetch('/users', {
 method: 'POST',
 headers: {
   'Content-Type': 'application/json'
 },
 body: JSON.stringify({
   name: 'Hubot',
   login: 'hubot',
 })
}).then(function(response) {
 // response.text()
}).then(function(body) {
 // body
});

// Загрузка файла
var input = document.querySelector('input[type="file"]');

var data = new FormData();
data.append('file', input.files[0]);
data.append('user', 'hubot');

fetch('/avatars', {
 method: 'POST',
 body: data
});
```

### superagent

https://github.com/visionmedia/superagent

```  
request.post('/user')
.set('Content-Type', 'application/json')
.send('{"name":"tj","pet":"tobi"}')
.end(callback);
```

### request

https://github.com/request/request

```  
request.post('/api').form({key:'value'}), function(err, httpResponse, body){ /* ... */ });
```

В React можно поместить любой из вышеупомянутых методов в `componentDidMount()`, аналогично в Vue.js.

Полное удаление ESLint
-----------------------

Удалите все плагины, начинающиеся на `eslint` из `devDependencies` в `package.json`, а также файлы `.eslintignore` и `.eslintrc.js` из корневой директории. Измените поле `dev` в `package.json` на:```
'dev': 'gulp start'
```

Удалите задачи `lint` и `eslint_start` из файла `gulpfile.js` и замените задачу `default` на `"gulp.task('default', ['start'])"`.

Обновление
----------
*v1.0.0 7 апреля 2019 года 21:19:59*

1. Обновлены версии зависимостей (Node v11.13.0).
2. Добавлена Jest.

*v0.2.6 24 марта 2018 года 22:16:43*

1. Обновлены версии зависимостей (Node v9.9.0).

*v0.2.5 13 января 2018 года 10:37:29*

1. Обновлены версии зависимостей до Node v9.3.0.
2. Добавлена инструкция по использованию токенов.

*v0.2.4 1 декабря 2017 года 14:16:03*

1. Обновлены версии зависимостей до Node v9.2.0.

*v0.2.3 23 октября 2017 года 23:26:56*

1. Обновлены версии зависимостей до Node v8.7.0.

*v0.2.2 17 сентября 2017 года 17:45:07*

1. Обновлены версии зависимостей для тестирования на Node v8.5.0.

*v0.2.1 19 июля 2017 года 19:38:19*

1. Удалён модуль MySQL (повторение).
2. Добавлено более подробное описание.

*v0.2 16 июля 2017 года 22:48:34*

1. Обновлен Koa до версии 2.3.0.
2. Заменён Koa-session2 на Koa-jwt, добавлен jsonwebtoken.
3. Обновлены следующие зависимости до указанных версий:```
Koa                         2.2.0     2.3.0      2.3.0       koa2-API-scaffold
koa-body                    2.2.0     2.3.0      2.3.0       koa2-API-scaffold
koa-router                  7.1.0     7.2.1      7.2.1       koa2-API-scaffold
babel-cli                   6.23.0    6.24.1     6.24.1      koa2-API-scaffold
babel-preset-es2015         6.23.0    6.24.1     6.24.1      koa2-API-scaffold
babel-preset-stage-2        6.23.0    6.24.1     6.24.1      koa2-API-scaffold
babel-register              6.23.0    6.24.1     6.24.1      koa2-API-scaffold
eslint-plugin-promise       3.4.0     3.5.0      3.5.0       koa2-API-scaffold
koa-compose                 3.0.0     4.0.0      4.0.0       koa2-API-scaffold
nodemailer                  4.0.0     4.0.1      4.0.1       koa2-API-scaffold
sequelize                  4.2.0     4.3.2      4.3.2       koa2-API-scaffold
eslint                      4.1.1     4.2.0      4.2.0       koa2-API-scaffold
eslint-config-standard      10.1.0    10.2.1     10.2.1      koa2-API-scaffold
eslint-friendly-formatter   2.1.0     3.0.0      3.0.0       koa2-API-scaffold
eslint-plugin-html          3.0.0     3.1.0      3.1.0       koa2-API-scaffold
gulp-eslint                 3.0.0     4.0.0      4.0.0       koa2-API-scaffold
koa-logger                  2.0.0     3.0.1      3.0.1       koa2-API-scaffold
```*v0.0.6 2017 года 2 февраля 17:17:23*

1. Изменён файл src/lib/sequelize.js, добавлена поддержка utf8mb4 (требуется версия MySQL > 5.5).

*v0.0.5 2017 года 12 февраля 01:25:34*

1. Изменён файл gulpfile.js, теперь при горячем перезапуске при изменении файла нет необходимости проверять все файлы, достаточно проверять изменённые, что увеличивает скорость разработки.
2. В package.json значение поля "start" изменено на "gulp nodemon", совместимо с изменениями в файле gulpfile.js.*v0.0.4 2017 года 2 февраля 7:15:57*  
1. Изменены методы конфигурации некоторых конфигурационных файлов, сделав их более строгими (пользователям старых версий это не касается, изменения не влияют на работу программы).  
2. В eslintrc.js изменён JavaScript-версионный конфигуратор на ES8, обеспечивая совместимость с async и await.  
3. В файле gulpfile.js на строке 12 добавлен контроль `src/**/*.js`.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Каркас для лёгкого RESTful API-сервера на основе Koa2. Развернуть Свернуть
WTFPL
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/yi-ge-koa2-API-scaffold.git
git@api.gitlife.ru:oschina-mirror/yi-ge-koa2-API-scaffold.git
oschina-mirror
yi-ge-koa2-API-scaffold
yi-ge-koa2-API-scaffold
master