Привет всем, меня зовут Юннинг, тот, кто написал"Дено от входа до запуска"а такжеПрактическое руководство по созданию HTTP-сервера на базе DenoАвтор Deno изначально начал с Deno только для развлечения проституток, и по этой причине он также бросил вызов однодневному входу в Deno с нуля. Но Дено действительно ароматный, и в свободное время он провел еще одну неделю, изучая MongoDB, и написал, по собственному признанию, практическое руководство по HTTP-серверу (студенты, работающие на бэкэнде, слегка распыляют).
Эта статья представляет собой введение в то, как я разработал плагин Deno и разместил его в официальном репозитории плагинов Deno. Плагин называется Duck, это небольшой инструмент, который автоматически сканирует уровень контроллера и регистрирует маршруты. Как использовать этот плагин, пожалуйста, нажмите на логотип непосредственно для студентов, которые в нем нуждаются:
Структура проекта
Этот проект родился благодаря написаниюПрактическое руководство по созданию HTTP-сервера на базе DenoКогда, чтобы реализовать функцию автоматического контроллера сканирования. Узнал от старшего брата Ляо Сюэфэна о коа.контроллер автоматического сканирования, помимо используемого языка, детали реализации и идеи также отличаются.
./
├── LICENSE
├── README.md
├── addAbcControllers.ts
├── addOakControllers.ts
├── addServestControllers.ts
├── mod.ts
└── test
├── abc
│ ├── controllers
│ │ └── helloworld.ts
│ └── server.ts
├── oak
│ ├── controllers
│ │ └── helloworld.ts
│ └── server.ts
└── servest
├── controllers
│ └── helloworld.ts
└── server.ts
-
mod.ts
: Файл записи плагина, официально рекомендованный Deno. -
test
: несколько тестовых демонстраций -
add***Controllers.ts
: совместимость с распространенными подключаемыми модулями промежуточного программного обеспечения HTTP-сервера, автоматическое определение, пользователям не нужно передавать параметры.
Процесс реализации
контроллер автоматического сканирования
Примечание. Ниже приведен фрагмент кода. Нажмите на утку в начале, чтобы просмотреть исходный код.
...
const realPath = Deno.realPathSync(dir);
...
for (const dirEntry of Deno.readDirSync(dir)) {
if (dirEntry.name.endsWith(".ts") || dirEntry.name.endsWith(".js")) {
const controller = await import(`file://${realPath}/${dirEntry.name}`);
const method = controller.method || "get";
const api = controller.api ||
dirEntry.name.replace(/(.*\/)*([^.]+).*/ig, "$2");
router[method](`/${api}`, controller.default);
}
}
- по мнению пользователя
dir
Получить папку с помощьюDeno.realPathSync
Получить реальный абсолютный путь, который используется при получении файла позже. - использовать
Deno.readDirSync
Интерфейс считывает все файлы в папке, и здесь происходит проверка, которую необходимоjs
илиts
Только файлы, заканчивающиеся на . - использовать
import
Модуль динамического импорта, тут яму не добавитьfile://
префикс, фактическая операция автоматически добавитhttps://
. - Здесь предполагается, что если контроллер не экспортирует имя, то имя файла автоматически считывается как имя API (здесь заимствовано из umijs)
- Наконец, динамически подключите контроллер к маршрутизатору (маршрутизатор также передается пользователем).
Смарт Совместимость
Это на самом деле ничего не сказать.Это вручную сравнить уникальные атрибуты этих плагинов, чтобы определить, какой плагин используется.В настоящее время он поддерживает три проекта с высоким вниманием: servest, дуб и abc.
export default async function (router: any, dir: string = "controllers") {
if (router.handle) {
return await addServestControllers(router,dir);
} else if(router.middleware) {
return await addAbcControllers(router,dir);
} else {
return await addOakControllers(router,dir);
}
}
Готово к использованию
После использования утки по умолчанию задаются два пути маршрутизации, иcheckHealth
Это необходимый интерфейс для проекта в принципе (мне однокурсники по бэкенду сказали).
...
router.get("/", (ctx: any) => {
ctx.response.body = "Hello Oak!";
}).get("/checkHealth", (ctx: any) => {
ctx.response.body = "The server is health. Just do it.";
});
...
Опубликовать плагин
1. Открытьdeno.land/x
2. Нажмите Добавить модуль
3. По инструкции на рисунке ниже нам нужно создать публичный репозиторий, размещенный на GitHub
4. Придумайте красивое имя и зарегистрируйтесь как можно скорее, а то вас ограбят начальники justjavac.Может это потому, что я боюсь, что вода заставит таких плагинов, как я, хахахаха.
5. Вам будет предложено добавить веб-хук GitHub, и выпуск будет успешным. Я только что попробовал superman, и он не был зарегистрирован.
Последнее городское здание собачьей головы! ! !
Эта статья была впервые опубликована вБлог Ян Цзюньнина, Творить нелегко, лайк 👍 - моя мотивация продолжать! ! !