@loopback/docs
Version:
Documentation files rendered at [https://loopback.io](https://loopback.io)
134 lines (97 loc) • 3.24 kB
Markdown
# /example-validation-app
An example application to demonstrate validation in LoopBack.
## Summary
This application shows how to add validation in a LoopBack application. It
exposes `/coffee-shops` endpoints to create/read/update/delete a `CoffeeShop`
instance with the in-memory storage.
### Key artifacts
1. [CoffeeShop model](src/models/coffee-shop.model.ts): Shows how to add
validation using [AJV](https://www.npmjs.com/package/ajv).
Example to limit length on a string:
```ts
({
type: 'string',
required: true,
// Add jsonSchema
jsonSchema: {
maxLength: 10,
minLength: 5,
errorMessage: 'City name should be between 5 and 10 characters',
},
})
city: string;
```
2. [ValidatePhoneNumInterceptor](src/interceptors/validate-phone-num.interceptor.ts):
an interceptor for custom validation - it checks whether the area code of the
phone number matches with the city name.
3. [CoffeeShopController](src/controllers/coffee-shop.controller.ts): controller
where the `ValidatePhoneNumInterceptor` is applied.
4. [MySequence](src/sequence.ts): a custom sequence for creating custom error
messages. This is not a requirement, just a demonstration of how to customize
error messages during runtime.
## Use
Start the app:
```sh
npm start
```
The application will listen on port 3000. Open http://localhost:3000/explorer in
your browser. You can try to test the validation for the `/coffee-shops`
endpoints.
## Testing validation at work
When calling `POST /coffee-shops` API, there are a few ways to test validation
is happening. An example of valid request body for `CoffeeShop` is:
```json
{
"city": "Toronto",
"phoneNum": "416-111-1111",
"capacity": 10
}
```
However, the following examples of request body are not valid, and you'll be
getting an error with status code 422 and their corresponding error messages.
### Example 1: CoffeeShop.city length exceeds limit of 10
```json
{
"city": "Toooooooooooronto",
"phoneNum": "416-111-1111",
"capacity": 10
}
```
### Example 2: CoffeeShop.phoneNum pattern is not "xxx-xxx-xxxx"
```json
{
"city": "Toronto",
"phoneNum": "4161111111",
"capacity": 10
}
```
### Example 3: CoffeeShop.capacity value exceeds the limit of 100
```json
{
"city": "Toronto",
"phoneNum": "416-111-1111",
"capacity": 10000
}
```
### Example 4: CoffeeShop.phoneNum has area code not matching the city name
```json
{
"city": "Toronto",
"phoneNum": "999-111-1111",
"capacity": 10
}
```
According to the logic set in
`src/interceptors/validate-phone-num.interceptor.ts`, if city name is `Toronto`,
the area code for the phone number should begin with `416` or `647`.
## Contributions
- [Guidelines](https://github.com/loopbackio/loopback-next/blob/master/docs/CONTRIBUTING.md)
- [Join the team](https://github.com/loopbackio/loopback-next/issues/110)
## Tests
Run `npm test` from the root folder.
## Contributors
See
[all contributors](https://github.com/loopbackio/loopback-next/graphs/contributors).
## License
MIT
[-@2x.png>)](http://loopback.io/)