КОДЕКС

Создайте свой внутренний сервер с 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. Следите за новостями.