Skip to main content
The Deno 2 Release Candidate is here
Learn more

NHttp Validator

Body validator for Deno nhttp based on class-validator.

for complete doc, please visit class-validator.

Installation

deno.land

import { validate } from "https://deno.land/x/nhttp_validator@0.3.0/mod.ts";

nest.land

import { validate } from "https://x.nest.land/nhttp_validator@0.3.0/mod.ts";

Usage

import { NHttp } from "https://deno.land/x/nhttp@1.1.5/mod.ts";
import {
  IsEmail,
  IsPhoneNumber,
  IsString,
  validate,
} from "https://deno.land/x/nhttp_validator@0.3.0/mod.ts";

// class-validator person
class Person {
  @IsString()
  name!: string;

  @IsEmail()
  email!: string;

  @IsPhoneNumber()
  phone!: string;
}

const app = new NHttp();

app.post("/person", validate(Person), ({ response, body }) => {
  return response.send(body);
});

app.listen(3000);

Error Message

If not valid throw error with status 422 (Unprocessable Entity).

{
  "status": 422,
  "message": [
    {
      "target": {},
      "property": "name",
      "children": [],
      "constraints": {
          "isString": "name must be a string"
      }
    },
    {
      "target": {},
      "property": "email",
      "children": [],
      "constraints": {
          "isEmail": "email must be an email"
      }
    },
    {
      "target": {},
      "property": "phone",
      "children": [],
      "constraints": {
          "isPhoneNumber": "phone must be a valid phone number"
      }
    }
  ],
  "name": "UnprocessableEntityError",
  "stack": [...]
}

Run

deno run --allow-net yourfile.ts

Featuring NHttp Controller

import { 
  NHttp, 
  RequestEvent 
} from "https://deno.land/x/nhttp@1.1.5/mod.ts";

import { 
  IsString, 
  IsEmail, 
  IsPhoneNumber, 
  Validate 
} from "https://deno.land/x/nhttp_validator@0.3.0/mod.ts";

import { 
  addControllers, 
  Controller, 
  BaseController,
  Post
} from "https://deno.land/x/nhttp_controller@0.4.0/mod.ts";

// class-validator person
class Person {
  @IsString()
  name!: string;

  @IsEmail()
  email!: string;

  @IsPhoneNumber()
  phone!: string;
}

// Person Controller
@Controller("/person")
class PersonController extends BaseController {

  @Validate(Person)
  @Post()
  save() {
    const { body } = this.requestEvent;
    return body;
  }
}

const app = new NHttp();

app.use(addControllers([PersonController]))

app.listen(3000);

License

MIT