# Роутер
Роутер/маршрутизатор - модуль dc-api-core/router
, занимающийся обработкой динамических URL.
# Методы
# register
pattern: String
- шаблон URL, может содержать вставку${parameterName}
для извлечения части путиtarget: String | Function
- обработчик запроса
Использование:
Регистрирует обработчик для URL, соответствующего шаблону.
В качестве обработчика может быть указана как строка в формате Контроллер.обработчик
,
так и лямбда с единственным аргументом - контексом контроллера.
Все полученные из URL параметры хранятся в контексте контроллера с ключом params
.
Рекомендуется регистрировать динамические пути до запуска API сервера, т.е. в файле startup.js
.
Пример:
startup.js:
const Router = require('dc-api-core/router');
// Регистрация обработчика для URL вида http://localhost:8080/profile-images/603948254@2x.png
// Указание обработчика из контроллера является более предпочтительным
Router.register('/profile-images/${userID}@${size}.png', 'ProfileData.getImage');
// Регистрация обработчика для URL вида http://localhost:8080/verify-hash/faaed104cba00df41ebabc
// Данные вариант тоже допустим, но только для очень моленьких обработчиков, которые может быть
// сложно отнести к одному из контроллеров
Router.register('/verify-hash/${hash}', ctx => Hasher.verify(ctx.params.hash));
controllers/ProfileData.js:
const fs = require('fs');
module.exports = class ProfileData {
getImage () {
const filePath = `${process.cwd()}/data/profile-images/${this.params.userID}/${this.params.size}.png`;
fs.exists(filePath, exists => {
if (exists) {
fs.readFile(filePath, buffer => {
this.header('Content-Type', 'image/png');
this.send(buffer, 200, true);
});
} else {
this.send('Image not found', 404, true);
}
});
}
}