# Introduction to Controllers
Controllers are responsible for controlling the flow of the application execution. When you make a request, a controller is responsible for returning the response to that request. The controller can perform one or more actions.
# Creating a controller
A controller file can be created manually or automatically using xjs-cli make:controller
command.
Xpresser has 3 types of controllers.
- A Class file controller
- An Object file controller
- An Object with custom services controller
Don't get overwhelmed, they all serve the same purpose with just a little preference difference, For a start we will be using a the class based controllers in our documentation.
# Class file controller
Filename: PostsController.js
const {ControllerClass} = require('xpresser');
class PostController extends ControllerClass {
all() { /** take action here **/ }
static create() { /** same as above but static **/}
}
module.exports = PostController;
The above is an example of a class file controller.
The class file controller MUST extend xpresser's base controller (ControllerClass
), this extension lets xpresser know that you are using a class and not an object.
this is because javascript has no official way of checking if a variable is a class.
The PostController
contains a static method and a non-static method, both works exactly the same way. Usage depends on your preference.
# Handling Requests.
In the method of your controller class is where you are likely to spend most of your time because it is where the action for a routed request is taken place.
You can route to a controller action like so:
$.router.get('/posts/all', 'PostsController@all');
Now, when a request matches the specified route URI, the all
method on the PostsController
class will be executed.
We can send a basic response like so
const {ControllerClass} = require('xpresser');
class PostController extends ControllerClass {
all(http) {
http.send("List of all posts.");
// Or like in express
http.res.send("List of all posts.")
}
}
The http
variable includes express req
and res
variables with more functions/helpers