npm install client-request-substitute
yarn add client-request-substitute
import { CRSResource } from 'client-request-substitute'
class UserResource extends CRSResource {
toCollection(faker) {
return {
id: faker.random.number(),
first_name: faker.name.firstName(),
email: faker.internet.email()
};
}
}
import { CRSRequest } from 'client-request-substitute'
class UserRequest extends CRSRequest {
rules() {
return {
first_name: ["string", "min:3", "max:255", "required"],
email: ["string", "email", "required"]
};
}
}
class UserService {
static getUsers() {
return new UserResource().getAll({ perPage: 20, page: 1 });
}
static getUserById(id) {
return new UserResource().get({ id });
}
static createUser(data) {
return new UserRequest().send(data, UserResource, ["first_name", "email"]);
}
}
UserService.getUsers().then((res) =>
console.log("Using Resource get all: ", res)
);
UserService.getUserById(123).then((res) =>
console.log("Using Resource get by ID: ", res)
);
UserService.createUser({ first_name: "John Doe", email: "test@site.com" })
.then((res) => console.log("Using Request and Resource", res));
UserService.createUser({ first_name: "", email: "" })
.catch((err) => console.log("Request validate failed", err.response));
Using Resource get all:
{
status: 200,
data: {
data: Array(20),
message: 'OK',
meta: {
page: 1
per_page: 20
total: 100
totalPages: 5
}
}
}
Using Resource get by ID
{
status: 200,
data: {
data: {
id: 123
first_name: "Jeffrey"
email: "Elyssa_Brekke70@yahoo.com"
},
message: "OK"
}
}
Using Request and Resource
{
status: 201,
data: {
data: {
email: "test@site.com",
first_name: "John Doe",
id: 81958
},
message: "Created"
}
}
Request validate failed
{
status: 422,
data: {
errors: {
first_name: ["'first_name' is not allowed to be empty"],
email: ["'email' is not allowed to be empty"]
},
message: "Created"
}
}
perPage:
Limit items in one pagetimeout:
Timout returned responsetotal:
Total items countfaker:
Instance package fakerstatusCodes:
HTTP Status codesReasonPhrase:
HTTP Status codes phrases
getAll(options) => {}
options:
Properties
perPage:
One page items countpage:
Current page
get(data) => {}
data:
Replaced data in generated item by resource
timeout:
Timout returned responseJoi:
Instance package JoistatusCodes:
HTTP Status codesReasonPhrase:
HTTP Status codes phrases
send(data, Resource, replacedFields) => {}
data:
Validated data with rulesResource:
returned data ResourcereplacedFields:
replaced values returned data by validated values