https://github.com/skrevolve/annotation-node
https://github.com/skrevolve/annotation-node
Last synced: 9 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/skrevolve/annotation-node
- Owner: skrevolve
- License: mit
- Created: 2024-08-12T04:55:39.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-08-12T07:37:25.000Z (almost 2 years ago)
- Last Synced: 2024-12-28T11:19:35.382Z (over 1 year ago)
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/annotation-node
- Size: 33.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# annotation-node
## installation
```shell
npm install annotation-node
```
## basic example
```typescript
import express, { Request, Response, NextFunction } from 'express';
import { Controller, Get, ControllerRegistry } from 'annotation-node';
@Controller('/users')
class UserController {
@Get('/')
getUsers(req: Request, res: Response) {
res.send('List of users');
}
}
@Controller('/products')
class ProductController {
@Get('/')
getProducts(req: Request, res: Response) {
res.send('List of products');
}
}
const app = express();
ControllerRegistry.addControllers(app, [UserController, ProductController], '/api');
app.listen(3000, () => console.log('Server is running on port 3000'));
```
## Registering Controllers as a Single Array
```typescript
ControllerRegistry.addControllers(app, [UserController, ProductController]);
```
## Registering grouped controllers
```typescript
ControllerRegistry.addControllers(app, {
'/v1': [UserController],
'/v2': [ProductController]
});
```
## Add prefix for entire API
```typescript
ControllerRegistry.addControllers(app, [UserController, ProductController], '/api');
```
## Example using multiple HTTP methods
```typescript
import { Controller, Get, Post, Put, Delete } from 'annotation-node';
import { Request, Response } from 'express';
@Controller('/users')
class UserController {
@Get('/')
getUsers(req: Request, res: Response) {
res.send('List of users');
}
@Post('/')
createUser(req: Request, res: Response) {
res.send('User created');
}
@Put('/:id')
updateUser(req: Request, res: Response) {
res.send(`User ${req.params.id} updated`);
}
@Delete('/:id')
deleteUser(req: Request, res: Response) {
res.send(`User ${req.params.id} deleted`);
}
}
export default UserController;
```
## Example of using middleware
```typescript
import express, { Request, Response, NextFunction } from 'express';
import { Controller, Get, Middleware, ControllerRegistry } from 'annotation-node';
function logger(req: Request, res: Response, next: NextFunction) {
console.log(`Request received at: ${new Date()}`);
next();
}
function auth(req: Request, res: Response, next: NextFunction) {
if (req.headers['authorization']) {
next();
} else {
res.status(401).send('Unauthorized');
}
}
@Controller('/user')
@Middleware(logger)
class UserController {
@Get('/public')
public getPublicInfo(req: Request, res: Response) {
res.send('Public information');
}
@Get('/private')
@Middleware(auth)
public getPrivateInfo(req: Request, res: Response) {
res.send('Private information');
}
}
const app = express();
ControllerRegistry.addControllers(app, [UserController]);
app.listen(3000, () => console.log('Server is running on port 3000'));
```