Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/aitthi/nylon
Nylon is a web framework for Node.js built with Tokio, Tower, Hyper, and Napi-rs
https://github.com/aitthi/nylon
api bun ffi hyper napi napi-rs node nodejs rust tokio-rs
Last synced: 2 months ago
JSON representation
Nylon is a web framework for Node.js built with Tokio, Tower, Hyper, and Napi-rs
- Host: GitHub
- URL: https://github.com/aitthi/nylon
- Owner: Aitthi
- License: mit
- Created: 2023-02-12T18:06:20.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-06-19T06:39:59.000Z (7 months ago)
- Last Synced: 2024-11-07T13:49:21.074Z (3 months ago)
- Topics: api, bun, ffi, hyper, napi, napi-rs, node, nodejs, rust, tokio-rs
- Language: Rust
- Homepage:
- Size: 1.09 MB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Nylon Experimental
[![NPM version](https://img.shields.io/npm/v/nylon-rs.svg?style=for-the-badge)](https://www.npmjs.com/package/nylon-rs)
Nylon is a web framework for Node.js built with Tokio, Tower, Hyper, and Napi-rs
## Installation
```bash
npm install nylon-rs
```or
```bash
yarn add nylon-rs
```## Usage
```ts
import { Nylon, Logger, Level, Request, Response, HttpException } from 'nylon-rs'
import { getHeapStatistics } from 'v8'
import os from 'os'async function bootstrap() {
let logger = new Logger(Level.Info)
let app = new Nylon()app.get('/', [
async (ctx) => {
let req = new Request(ctx)
let res = new Response(ctx)
res.json({
data: {
name: 'Nylon',
version: '1.0.0',
path: req.path(),
query: req.queries(),
user_agent: req.header('user-agent')
}
})
return res.jump()
},
async (ctx) => {
// throw new Error(HttpException(401, 'Unauthorized'))let res = new Response(ctx)
res.status(201)
return res.end()
}
])app.get('/:name', [
async (ctx) => {
let req = new Request(ctx)
let res = new Response(ctx)
res.json({
data: {
is_params: true,
name: 'Nylon',
version: '1.0.0',
path: req.path(),
query: req.queries(),
user_agent: req.header('user-agent')
}
})
return res.jump()
},
async (ctx) => {
// throw new Error(HttpException(401, 'Unauthorized'))let res = new Response(ctx)
res.status(201)
return res.end()
}
])app.post('/', [
async (ctx) => {
let req = new Request(ctx)
let res = new Response(ctx)
let multipart = await req.multipart({
limit: '5mb', // 10mb, 1kb only support kb, mb // 10 * 1024 * 1024
allowed_fields: ['name', 'file'] // optional
})
console.log('multipart', multipart)
res.json({
data: {
method: req.method(),
name: 'Nylon',
version: '1.0.0',
user_agent: req.header('user-agent')
}
})
return res.jump()
},
async (ctx) => {
// throw new Error(HttpException(401, 'Unauthorized'))let res = new Response(ctx)
res.status(201)
return res.end()
}
])await app.listen(3000, '0.0.0.0', () => {
let scopeScope = logger.scope('Bootstrap')
scopeScope.info(['Worker', process.pid + ' is alive!'].join(' '))
scopeScope.info(['HOST_NAME', os.hostname()].join(' '))
scopeScope.info(['Platform', os.platform()].join(' '))
scopeScope.info(['Node Heap size limit', `${getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`].join(' '))
scopeScope.info(`🚀 Application is running on: 0.0.0.0:3000`)
})
}// Bootstrap for bun 1.0.x
// @ts-ignore
// await bootstrap().then(() => {
// console.log('Bootstrap done!')
// })bootstrap().then(() => {
console.log('Bootstrap done!')
})
```