Фен (простой веб-фреймворк для обозначения)

Он все еще находится в разработке. Используя обозначение v0.3.0. Добро пожаловать, чтобы присоединиться к нам или дать свой совет.

Github: https://github.com/fen-land/deno-fen

Вводить

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
};