tsunamy
Version:
A new typesript framework
105 lines (80 loc) • 2.89 kB
Markdown
[](//npmjs.com/package/tsunamy)
# Tsunamy framework
a node.ts framework, Alpha version.
Make easy to build a REST API server and serve a SPA
## Quick Start
go to [link](https://github.com/apokalupsis/tsunamyExemple) and download the project. Write your new routes in `src/api/app.controller.ts`, run `npm run start`, it will reload automatically on file change.
## Features
project architecture
```
src
|-api (contain module, controller and service)
|-config (contain the server config files)
|-public (contain all the public files)
main.ts (bootsrap the module)
```
if the request starts with `/api` the app checks the routes in the controller, otherwise, the app serves the static files on the public folder.
supports methods: `GET`, `POST`, `PUT` and `DELETE` with parameters in the route, query or body.
Example:
GET `api/custom/url/route/4?queryvar=blabla`
in the controller
```typescript
@RequestMapping({ path:"/custom/url/route/{id}", method: 'GET'})
customFunction(@PathParam('id') id: number, @QueryParam('queryvar', {notNull: true}) queryvar: string) {
return queryvar + id;
}
```
Function can have this parameters :
@PathParam('name')
@QueryParam('name')
@Body()
@Response()
Options can be passed to @QueryParam.
## Guards
You can use Guards annotation for do some process fefore the fonction (exemple secure route).
```typescript
function isAdmin(request){ return true; }
@RequestMapping({ path:"/custom/url/route/{id}", method: 'GET'})
@Guards(isAdmin)
customFunction(@PathParam('id') id: number, @QueryParam('queryvar') queryvar: string) {
return queryvar + id;
}
```
## Response
You can change the response manually, in the nodejs way.
```typescript
@RequestMapping({ path:"/custom/url/route/{id}", method: 'GET'})
customFunction(@Response() res: any) {
res.setHeader('test', 'testValue')
return '';
}
```
## ResponseEntity
This type is used to http response (http code + body). It's a class with generic body's type.
```typescript
function getById(id: number){ return new Object(); }
@RequestMapping({ path:"/custom/url/route/{id}", method: 'GET'})
customFunction(@PathParam('id') id: number): Promise<ResponseEntity<Object>> {
return new ResponseEntity<>(HttpStatus.OK, getById(id));
}
```
## Log
You can log message in console and/or in file. There are 3 levels: INFO, WARN and ERROR
When we log with ERROR level the stack is added to the message.
```typescript
try {
Log.Info('My message with INFO level');
throw new Error()
} catch (e) {
Log.Err('My message with ERROR level');
}
```
## https
change to https : true in the CONFIGURATION file
and add the two file to your projet
`/certificate/key.pem`
`/certificate/certificate.pem`
be careful this files are ignored by git (not commit)
Project link
[here](https://github.com/apokalupsis/tsunamy)
## more feature soon