Фен (простой веб-фреймворк для обозначения)
Он все еще находится в разработке. Используя обозначение v0.3.0. Добро пожаловать, чтобы присоединиться к нам или дать свой совет.
Вводить
Fen - это простой веб-фреймворк, с помощью которого вы можете создать сервер на базе TypeScript. Он обеспечивает простой способ создания сервера и использует инструменты и процессы для увеличения мощности сервера. Я надеюсь, что другие могут попробовать Fen, чтобы я мог получить больше отзывов и узнать, как я могу его улучшить.
Как 2 использовать
Во-первых, вам следует установить NEM:
curl -fsSL https://deno.land/x/install/install.sh | sh
Имейте в виду, что вы используете Github Url 2, импортируйте наш скрипт!
Мы предложим более удобный способ использования нашего скрипта после того, как работа будет выполнена.
Проверьте, работает ли это:
import {Server} from 'https://github.com/fen-land/deno-fen/raw/master/src/server.ts'; const s = new Server(); s.port = 1882; s.start();
Добавьте свой собственный контроллер
import {Server} from 'https://github.com/fen-land/deno-fen/raw/master/src/server.ts'; const s = new Server(); // pls keep in mind that you may add an async function as controller s.setController( async (ctx) => { ctx.body = 'It\'s alive!'; } ) s.port = 1882; s.start();
Тогда катайтесь с деном!
deno -A ${yours}.ts
О процессе
процесс - это последовательность процессов между контроллерами, вы можете разработать свой собственный процесс;
Сессионный процесс
Для Fen это простой сеанс, использующий сеанс (карту) для хранения данных.
import {Server} from 'https://github.com/fen-land/deno-fen/raw/master/src/server.ts'; import Session from 'https://github.com/fen-land/deno-fen/raw/master/src/process/session.ts' const session = new Session(); const s = new Server(); s.addProcess(session.process); s.port = 1882; s.setController( async (ctx) => { const {session} = ctx; let c = session.get('c') || 1; if(ctx.path === '/') { session.set('c', c + 1); } ctx.body = `It\'s alive for path '/' ${c} times in this browser!`; } ); s.start();
Об инструменте
Инструмент - это последовательная функция, которая помогает делать что-то с контроллером.
Как вы можете видеть на Session
const cookie = cookieReader(cookie); setCookie.append('set-cookie', cookie2String(cookie));
Маршрутизатор
В болоте мы предоставляем способ организации маршрутов, инструмент для фрезерования.
В этом примере показано множество способов использования роутера.
import { Server } from "../src/server.ts"; import { Router } from "../src/tool/router.ts"; const s = new Server(); s.port = 1882; s.logger.changeLevel('ALL'); let mergeRouter = new Router('merge'); mergeRouter .get('/', async (ctx) => ctx.body = `${ctx.router.name} in ${ctx.router.route}`) .post('/', async (ctx) => ctx.body = `POST ${ctx.router.name} in ${ctx.router.route}`) .get('me', async (ctx) => ctx.body = `${ctx.router.name} in ${ctx.router.route}`); let router = new Router(); router .get('/:id', async (ctx) => { ctx.body = `we have ${JSON.stringify(ctx.router.params)} in ${ctx.router.route}` }) .get('/:id/:name', async (ctx) => { ctx.body = `we have ${JSON.stringify(ctx.router.params)} in ${ctx.router.route}` }) .get('/hello/:name', async (ctx) => { ctx.body = `hello ${ctx.router.params.name} in ${ctx.router.route}` }) .use({ '/use': {get: async (ctx) => ctx.body = `use in ${ctx.router.route}`}}) .merge('/merge', mergeRouter); ; s.setController(router.controller); s.start();
Router
теперь поддерживают эти методы:
use(route: IRoute) // a way to add route // IRoute just like: // {[path]: {[method]: async function controller(cxt)}} merge(route: string, router:Router) // merge other router by add prefix route get post head put delete connect options trace
Регистратор
В fen мы предоставляем возможность регистрировать информацию через предоставляемый нами регистратор. Logger теперь имеет 5 уровней ведения журнала, чтобы помочь вам развиваться. Вы можете получить к ним доступ на context.logger
.
'ALL': Display all log, 'TRACE': trace some detail, 'DEBUG': log to help you debug, 'INFO': normal info for you, 'WARN': simple warn, 'ERROR': error that won't stop the server, 'FATAL': once it happened, server won't work, 'OFF': Disable all log
Вы можете изменить уровень журнала с помощью changeLevel
, регистратор также может получить доступ к экземпляру Server
logger.changeLevel('ALL');
Статический
Мы предоставляем инструмент для статического файла, он будет генерировать контроллер для сервера (или маршрутизатора).
import {Server} from '../src/server.ts'; import {staticProcess} from "../src/tool/static.ts"; const s = new Server(); s.port = 1882; // it will respond file from the path where deno run s.setController(staticProcess({root: ''})); s.start();
и вот некоторые из вариантов, в которые вы можете вписаться
{ root: root path of the file, maxAge: (s), allowHidden: allow access hidden file, index: access if no file name provide 'index.html', immutable: immutable in cache-control, pathRender: (path) => afterpath, if you want do sth. with path };