Strong validated Data Transfer Objects for typescript.
NPM: typed-dto
Installation: npm install typed-dto
./dto/article.dto.ts
import {BaseDTO, Schema, Property} from "typed-dto";
@Schema({strict: true})
class ArticleDTO extends BaseDTO
{
@Property({ type: "string", regexp: /^[0-9a-zA-Z]{5,256}$/s })
public title: string;
@Property({ type: "string", min: 5, max: 256*256 })
public content: string;
@Property({ type: "date" })
public publishedAt: Date;
}
articles.controller.ts
import { Controller, Post, Body, HttpException } from '@nestjs/common';
import {ArticleDTO} from "./dto/article.dto";
@Controller("articles")
export class ArticlesController
{
@Post("/create")
create(@Body() body): string
{
const article = ArticleDTO.create(body);
if(article) // check if not null
return "OK";
throw new HttpException("Invalid body.", 400);
}
}
app.ts
import * as express from "express";
import * as bodyParser from "body-parser";
import {ArticleDTO} from "./dto/article.dto";
const app = express();
app.use( bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/articles/create', function(req, res)
{
const article = ArticleDTO.create(req.body);
if(article) // check if not null
{
res.writeHead(200);
res.end("OK");
}
else
{
res.writeHead(400);
res.end("Invalid body.");
}
});
app.listen(3000);