В этой статье мы собираемся изучать основы Deno, как и как управлять программой и охвачению безопасности.
DENO – это новый JavaScript и TeamplectStime Runtime, написанные в Rust. Он предлагает жесткую безопасность, Skyscript Coldent Out-of-Box, один исполняемый файл для его запуска и набор рассмотренных и аудированных стандартных модулей.
Как NPM В Node.js пакеты в Deno управляются в централизованном репозитории пакета под названием Икс . Мы будем использовать одну из этих библиотек, дубовых, для создания сервера на основе API для отдыха в Deno.
После изучения оснований, используя экспресс-подобный пакет маршрутизатора Дуб Мы перепрыгим в глубокий конец Deno и построить полное приложение.
Вот что мы настроим в этом приложении:
- Сопоставление каркасов URL для конечных точек с использованием файла конфигурации на основе JSON.
- Имеются даты истечения срока действия к каждому URL, так что эти перенаправления действительны только в течение ограниченного периода времени.
0. Предварительные условия
- Установите Deno из эта ссылка Отказ
- Убедитесь, что вы знаете основы JavaScript.
Хотя не на самом деле не требуется следовать вместе с этой статьей, вы можете проверить видео YouTube ниже, чтобы получить введение в Deno в формате видео.
Итак, давайте начнем. ?
1. Как построить маршрутизатор
Чтобы написать серверный код для нашего приложения, мы будем использовать дубовый модуль. Он имеет экспресс-синтаксис для определения маршрутов API.
Если мы посмотрим на его Документация здесь Раздел « Базовое использование ». Итак, мы расширимся по этому коду для создания нашего приложения.
Чтобы проверить этот код, вы можете создать файл под названием index.ts В папке и скопируйте в код «Базовый доступ».
Чтобы понять, как запустить файлы Teamscript или JavaScript в Deno, сначала нужно понять, как Deno работает файлы.
Вы запускаете файл, запустив команду deno запустить file_name.ts или file_name.js За ним последовал набор флагов, обеспечивающих определенные разрешения системы к вашему приложению.
Чтобы проверить это, запустите файл, который мы только что создали, содержащие код «базового использования», используя команду DENO RUN index.ts Отказ
Вы увидите, что Deno жалуется, что вы не дали доступ к сети к вашему приложению. Итак, чтобы сделать это, вы добавляете -ALLY-NET в команду запуска. Команда будет выглядеть как Deno Run index.ts -allow-net Отказ
Маршрутизатор, записанный в код «Базового использования», выглядит следующим образом:
router
.get("/", (context) => {
context.response.body = "Hello world!";
})
.get("/book", (context) => {
context.response.body = Array.from(books.values());
})
.get("/book/:id", (context) => {
if (context.params && context.params.id && books.has(context.params.id)) {
context.response.body = books.get(context.params.id);
}
});
Сломать вышеуказанный код, сначала a Маршрутизатор Объект был определен. Тогда Получить Функция вызывается на маршрутизаторе, чтобы определить различные конечные точки для нашего приложения. Соответствующая логика определяется внутри функций обратного вызова.
Например, для «конечной точки»/«Функция обратного вызова, которая возвращает« Hello World »в тело в ответ на ответ. Мы можем сохранить эту конечную точку без изменений для проверки того, работает ли наш сервер приложений, получая этот ответ.
Нам не нужна URL-адрес «/книги», который был определен, поэтому его определение может быть смело удалено. На данный момент ваш роутер должен иметь следующую структуру:
router
.get("/", (context) => {
context.response.body = "Hello world!";
})
.get("/book/:id", (context) => {
if (context.params && context.params.id && books.has(context.params.id)) {
context.response.body = books.get(context.params.id);
}
});В следующем разделе мы будем ориентироваться на начала создания фактического приложения.
2. Как построить короткоформат URL
Теперь давайте начнем с создания фактического сокращения URL.
Он должен перенаправлять до пункта назначения ( dest ), основываясь на Шорткод Отказ Перенаправить также должен быть только что до Распространение , который может быть предоставлен в формате ежемесячного дня.
На основании этих предположений давайте создадим файл конфигурации, названный URLS.JSON Отказ Формат файла будет:
{
"shortcode": {
"dest": "destination_url_string",
"expiryDate": "YYYY-MM-DD"
}
}
Вы можете Проверьте файл JSON здесь Отказ
Чтобы прочитать этот файл JSON в своем коде, добавьте следующее на вершину вашего index.ts :
import { Application, Router } from "";
const urls = JSON.parse(Deno.readTextFileSync("./urls.json"));
console.log(urls);
Теперь, чтобы запустить свой index.ts вам понадобится другой флаг -Allow-Read , в противном случае DENO бросит «Прочитанные разрешения не предоставленные» ошибки. Ваша окончательная команда становится DENO RON-FIT-NET -ALLE-READ index.ts Отказ
После запуска этой команды вы увидите файл JSON, напечатанный в окне вашего терминала. Это означает, что ваша программа способна правильно прочитать файл JSON.
Если мы вернемся к примеру «базового использования», который мы видели выше, маршрут «/книга/: ID» – это именно то, что нам нужно.
Вместо «/book/: id», мы можем использовать «/SHRT/URLID», где мы получим отдельные URL-адреса на основе URL ID ( : URLID ).
Замените существующий код, присутствующий внутри «/книга/: ID».
.get("/shrt/:urlid", (context) => {
if (context.params && context.params.urlid && urls[context.params.urlid]) {
context.response.redirect(urls[context.params.urlid].dest);
} else {
context.response.body = "404";
}
});
Если Состояние в маршруте делает следующее:
- Проверки Если параметры прикреплены к маршруту
- Проверяет, если параметр
URLIDнаходится в списке параметров. - Проверяет, будь то
URLIDсовпадает с любым URL в нашем JSON.
Если он соответствует всем этим, пользователь перенаправляется на правильный URL. Если это не так, ответ на телу 404 возвращается.
Чтобы проверить это, скопируйте этот маршрут в index.ts Отказ Маршрутизатор теперь будет выглядеть так:
router
.get("/", (context) => {
context.response.body = "Hello world!";
})
.get("/shrt/:urlid", (context) => {
if (context.params && context.params.urlid && urls[context.params.urlid]) {
context.response.redirect(urls[context.params.urlid].dest);
} else {
context.response.body = "404";
}
});
И запустить файл, используя DENO RON-FIT-NET -ALLE-READ index.ts Отказ
Если вы скопировали файл JSON из примера, и если вы перейдете к http://localhost: 8000/Шрт/г , вы будете перенаправлены на домашнюю страницу Google.
С другой стороны, если вы используете случайный шорткод, который не работает в нашем конфиге URL, он приведет вас на страницу 404.
Тем не менее, вы увидите, что наш шортан не реагирует на реагирование на изменения в файле JSON. Чтобы проверить это, попробуйте добавить новый перенаправление на URLS.JSON в том же формате, что и:
"shortcode": {
"dest": "destination_url_string",
"expiryDate": "YYYY-MM-DD"
}Причина этого в том, что URLS.JSON Читается только один раз в этом начале. Итак, теперь мы добавим Live-Reloading на наш сервер.
3. Как добавить Live-Reloading
Сделать URL Объект реагирует в реакцию для изменений в файле JSON, мы просто перемещаем оператор чтения внутри нашего маршрута. Это должно выглядеть следующее:
.get("/shrt/:urlid", (context) => {
const urls = JSON.parse(Deno.readTextFileSync("./urls.json"));
if (context.params && context.params.urlid && urls[context.params.urlid]) {
context.response.redirect(urls[context.params.urlid].dest);
} else {
context.response.body = "404";
}
});
Обратите внимание, как мы переместили объект URLS внутри вашего маршрутизатора. Теперь в этом случае файл конфигурации читается каждый раз, когда называется маршрутом, поэтому он может реагировать в реакцию любых изменений, сделанных в URLS.JSON файл. Так что даже если мы добавим или удалите другие перенаправления на лету, наш код реагирует на него.
4. Как добавить срок действия URL
Чтобы наши URL-адреса истекают в определенную дату, мы будем использовать популярную библиотеку Moment.js, что позволяет легко работать с датами.
К счастью, это также было портирован для DENO Отказ Чтобы понять, как это работает, проверьте свою документацию в предыдущей ссылке.
Чтобы использовать его в нашем коде, импортируйте его прямо через его URL-адрес:
import { Application, Router } from "";
import { moment } from "";
const router = new Router();
Чтобы проверить дату, когда URL-адрес истекает, мы проверяем Распространение ключ на нашем URL объект. Это заставит код выглядеть так:
if (context.params && context.params.urlid && urls[context.params.urlid]) {
if (
urls[context.params.urlid].expiryDate > moment().format("YYYY-MM-DD")
) {
context.response.redirect(urls[context.params.urlid].dest);
} else {
context.response.body = "Link Expired";
}
} else {
context.response.body = "404";
}
В момент (). Формат ("yyyy-mm-dd") Мы получаем текущую дату и время, используя момент () Отказ Мы можем преобразовать его в формат «YYYY-MM-DD» (летний день), используя функцию .Format («ГГГМ-ММ-ДД») Отказ
Сравнивая его против нашего Распространение Ключ, мы можем проверить, истек ли URL или нет.
Вот и все! Вы построили полностью функциональный короткоформат URL в DENO. Вы можете найти последний код В репо Github здесь Отказ
Проверьте его, установив Распространение как текущая дата и сделав другие изменения в URLS.JSON и наш код.
Мои мысли о Deno
Чтобы обернуть статью, я поставлю свои форвардные последние мысли на Deno.land.
Хотя освежается, чтобы увидеть язык на стороне сервера, который принимает во внимание и поддерживает систему Sypercript, Deno все еще имеет долгий путь, прежде чем быть готов к использованию в производственных системах.
Например, компиляция Typeyctry все еще очень медленная, с времен компиляции ~ 20 секунд, даже для простых программ, таких как тот, который мы только что разработали.
На фронте отчетности об ошибках он все еще довольно плохо с описанием ошибок. Например, во время встраивания кода читать URLS.JSON В самой функции DENO не может сообщить, что -allow-Read Флаг не был установлен. Вместо этого он просто бросает внутреннюю ошибку сервера без надлежащей ошибки, напечатанной на терминале.
Что дальше?
Вы можете улучшить свои навыки Deno или Teadercript, создавая более сложные приложения, такие как Приложение в чате или Википедия клон Отказ
Вы также можете пройти документацию Deno в deno.land Чтобы получить более знакомые с основы.
Спасибо за чтение этого далеко и счастливого программирования? !
Важные ссылки
DENO – HTTPS://deno.land DENO X (Пакетный репозиторий) – https://deno.land/x/ Дуб (Read Framework) – https://deno.land/x/oak Образование Oak Basic – https://deno.land/x/oak@v6.3.1#Basic-Usage Final GitHub Repo – https://github.com/akash-joshi/deno-url-shortener.
Оригинал: “https://www.freecodecamp.org/news/build-a-url-shortener-in-deno/”