КОДЕКС
Создайте свой внутренний сервер с Deno
В этом уроке мы поговорим о Deno. Deno - это среда выполнения для JavaScript и TypeScript, основанная на движке V8 JavaScript и языке программирования Rust. Он был создан Райаном Далем, первоначальным создателем Node.js, и ориентирован на производительность. Об этом заявил Даль в 2018 году во время выступления «10 вещей, о которых я сожалею о Node.js».
Давайте приступим к делу
Мы собираемся создать внутренний сервер с использованием Deno, если вы знакомы с NodeJs и Express, вы уже должны знать, как запустить сервер с помощью NodeJs или Express. Например:
NodeJs
const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World'); }); server.listen(port, hostname, () => { console.log(`Hello World!`); });
выражать
const express = require('express') const app = express() const port = 3000 app.get('/', (req, res) => res.send('Hello World!')) app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))
Вышеупомянутые коды Express и NodeJs для запуска сервера - это довольно простые вещи, которые большинство людей уже должно знать к настоящему времени.
Давайте посмотрим, как мы собираемся запускать сервер с помощью Deno.
Дено
Перед этим давайте сначала установим Deno на нашу машину, вы можете обратиться к руководству по установке здесь. После того, как вы установили Deno на свой компьютер, откройте командную строку и запустите deno --version
. Если у вас установлен Deno правильно, вы должны увидеть версию установленного Deno.
Теперь создайте новый .ts
файл. Это одна из новых вещей, которые Deno предлагает в таблице. Deno - это безопасная среда выполнения как для Javascript, так и для Typescript, поэтому вы можете использовать файл Typescript для написания кода. Довольно аккуратно, да?
Скопируйте приведенный ниже код, чтобы запустить простой сервер.
import { serve } from "https://deno.land/std/http/server.ts" console.log("server is listening at 0.0.0.0:8000") for await (const req of serve("0.0.0.0:8000")) { console.log(req.url) if (req.method === "GET") { req.respond({ body: 'Hello World!'}) } }
Сохраните файл с любым именем в командной строке. Выполните следующую команду deno run your_file_name.ts
. Вы должны увидеть ошибку.
Ошибка возврата связана с тем, что Deno по умолчанию защищен. Нет доступа к файлам, сети или среде, если явно не разрешено. Итак, давайте включим его. Выполните следующую команду deno run --allow-net your_file_name.ts
Рино - Модуль Дено
Итак, теперь мы создали простой сервер с использованием Deno. Теперь давайте попробуем создать несколько маршрутов, используя Reno (модуль Deno). Скопируйте и вставьте следующее в свой файл .ts.
import { listenAndServe, ServerRequest } from "https://deno.land/[email protected]/http/server.ts"; import { createRouter, AugmentedRequest, createRouteMap, textResponse, jsonResponse, } from "https://deno.land/x/[email protected]/reno/mod.ts"; export const routes = createRouteMap([ ["/helloReno", () => textResponse("Response from Reno Server")], ["/swapi", async (req: AugmentedRequest) => { const res = await fetch( `https://swapi.dev/api/people`, ); return jsonResponse(await res.json()); }], ]); const router = createRouter(routes); (async () => { console.log("Listening for requests..."); await listenAndServe( ":8001", async (req: ServerRequest) => { try { const res = await router(req); return req.respond(res); } catch (e) { return req.respond(e); } }, ); })();
Теперь запустите следующее: deno run --allow-net your_file_name.ts
С Reno очень просто определять маршруты, мне нравится, насколько прост этот модуль, но давайте взглянем на другой модуль Deno.
Denotrain - Модуль Deno
Скопируйте и вставьте следующее в свой файл машинописного текста и запустите его с помощью deno run --allow-net your_file_name.ts
import { Application, Router, AppOptions } from "https://deno.land/x/[email protected]/mod.ts"; const options = { host : '127.0.0.1', port : 8080 } const app = new Application(options); const router = new Router(); app.use((ctx) => {}); app.get("/", (ctx) => { return {"Deno": "Train", "Hello" : "World"}; }); router.get("/addUser", async (ctx) => { return "This is the endpoint to add user!"; }); app.use("/user", router); await app.run();
Используя denotrain, мы можем настроить наш внутренний сервер аналогично Express. Честно говоря, denotrain был вдохновлен Express by node.
JWT In Deno
Теперь давайте попробуем создать JWT (веб-токен JSON) в Deno. Используя denotrain, мы можем сделать это так.
import { Application, Router, AppOptions } from "https://deno.land/x/[email protected]/mod.ts"; import { validateJwt } from "https://deno.land/x/djwt/validate.ts" import { makeJwt, setExpiration, Jose, Payload, } from "https://deno.land/x/djwt/create.ts" const key = "rasyue-secret" const payload: Payload = { iss: "rasyue", exp: setExpiration(new Date().getTime() + 60000), } const header: Jose = { alg: "HS256", typ: "JWT", } const options = { host : '127.0.0.1', port : 8080 } const app = new Application(options); const router = new Router(); app.use((ctx) => {}); app.get("/", (ctx) => { return {"Deno": "Train", "Hello" : "World", "jwt" : makeJwt({ header, payload, key })}; }); router.get("/addUser", async (ctx) => { return "This is the endpoint to add user!"; }); app.use("/user", router); await app.run();
Вот и некоторые из способов создания внутреннего сервера с помощью Deno. Следите за новостями.