skeidjs
TypeScript icon, indicating that this package has built-in type declarations

1.8.0 • Public • Published

skeiðjs

About

skeidjs is a lightweight typescript based framework for creating restful apis.
The objective is to have a small driverless and expressive application that can run.
It uses ideas of declarative programming and concepts you may know from angular2. You can declare a @Application class (comparable to NgModules) and inject there the components with the endpoints and other dependencies and middlewares.
The main part is implemented via the typescript decorators (unfortunately this is still declared as an experimental feature and may change in future. Currently its working with typescript 2.8.1. If the new ECMA-script version will also support decorators it could also work with plain js)

Functionality notes

See full doc at

File handling

Because the endpoints are called later on from the router, handling the path directly in the endpoint can cause some problems (in general you would receive a HTTP 500 error code), because the path would'nt work. Use a static service class therefore to keep the file path clean.
You can use the binary method of the response to send the whole file binary at once or use the stream method for streaming data. Whatever: please keep in mind of setting the correct headers for the response

response.writeHead(200, {
    'Content-Type': 'audio/mpeg',
    'Content-Length': fileSize,
    'Content-Disposition': 'attachment; filename=your_file_name'
});
 

Middleware evaluation

The evaluation of middleware function goes as it follows:

  • First: the application scoped middleware
  • Second: the module scoped middleware
  • Third: the component scoped middleware
  • Fourth: the endpoint scoped middleware
  • The middleware follows the order, given in the array.
  • The last chain is the endpoint function
  • An endpoint/middleware function has three parameters (request, response, next?);
  • The next() function will break the current execution of the current function and start the next one

Routes

  • The basic route scheme is: /$applicationRoute/$moduleRoute/$componentRoute/$endpointRoute
  • you can define a param in a route like /:foo
    and access it via request.params.foo

Route Typing

you can directly define a typed route param with the pattern :param#type
/:id#number an non digit route would return a 404. The available types are:

  • number
  • hex
  • alpha (=> [a-zA-Z])

Decorator driven

Everything is decorator driven. The framework is not supposed to run an application like the "express.use().listen(x)". You decorate the main component with @Application and execute the driver without setting the app up manually. That also means its not supposed to be compatible with vanilla node-js, as long as ecma script doesnt provide decorators.
You are also able to gather components into modules and import the modules into your app, to have a nice clean structural approach.

Note!

Set in your tsconfig.json

{  
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
    
}

Visit the playground.ts to see a working example

playground.ts

Package Sidebar

Install

npm i skeidjs

Weekly Downloads

1

Version

1.8.0

License

MIT

Unpacked Size

211 kB

Total Files

195

Last publish

Collaborators

  • nilsroesel