1.2.5 • Published 8 months ago

decorated-fastify v1.2.5

Weekly downloads
-
License
ISC
Repository
-
Last release
8 months ago

Decorated Fastify

Basic

@Controller()
class HelloController {
  @Get()
  getHello = route((req, res) => {
    res.status(200).send({ message: "Hello World!" });
  });
}

registerControllers(fastify, [HelloController], {
  // optional
  basePath: "/api", // results all controllers to have a starting of /api
});

// get url/api -> message: Hello World!

Bigger

 const mainSchema = Joi.object({
  text: Joi.string().required().messages({"any.required" : "Text is required"});
});


@Controller("/hello")
class HelloController {
  @Get("/main")
  getHello = route((req, res) => {
    res.status(200).send({ message: "Hello World!" });
  });

  @Validate(mainSchema)  // returns *Text is required*. You can make it look better with onError hook
  @Post("/main")
  createHello = route<{Body: { text: string }}>((req, res) => {
    res.status(200).send({ message: req.body.text }); // text is %100 exists, it is validated
  });
}

registerControllers(fastify, [HelloController], {
  basePath: "/api",
});

// get url/api/hello/main -> message: Hello World!

Create and Use Middleware && Use services outside controllers/services

const Auth = CreateHandlerDecorator<string>(async (req, res, done, payload) => {
  if (req.headers.authorization) {
    req.user = await FastDI.service(dbService).getUser(req.headers.authorization); // Use service outside
    done();
  }
  // also you can use optional payload, its type is generic, so it is now string
  return reply.status(401).send({ message: "Needs auth" });
});

@Controller("/hello")
class HelloController {
  @Auth() // now user must be authorized - Also you can pass payload like @Auth("Admin")
  @Get("/main")
  getHello = route((req, res) => {
    res.status(200).send({ message: "Hello World!" });
  });
}

Global Middleware

const Auth = CreateControllerHandlerDecorator<string>(async (req, res, done, payload) => {
  if (req.headers.authorization) {
    req.user = await FastDI.service(dbService).getUser(req.headers.authorization); // Use service outside
    done();
  }
  // also you can use optional payload, its type is generic, so it is now string
  return reply.status(401).send({ message: "Needs auth" });
});

@Auth() // it affects all non pure routes
@Controller("/hello")
class HelloController {
  @Get("/main") // this is protected
  getHello = route((req, res) => {
    res.status(200).send({ message: "Hello World!" });
  });

  @Pure()
  @Get("/main") // this is not protected
  getHi = route((req, res) => {
    res.status(200).send({ message: "Hi World!" });
  });
}
1.2.5

8 months ago

1.2.4

8 months ago

1.2.3

2 years ago

1.2.2

2 years ago

1.2.1

2 years ago

1.2.0

2 years ago

1.1.6

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.1

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.1.0

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago