Transcript
-
- So two lessons ago, we learned how we were getting to our homepage, but how can we add additional pages?
-
After all, a web server is not too great if you're just limited to one page. We know that our routes are defined within our routes.ts file within our start directory.
-
And we know that we can import a router from AdonisJS that allows us to define our routes as we saw with our homepage. So let's try to add in an additional route
-
by typing router. and let's see what our options are. So we see a lot of things here. If we scroll down, we'll continue to see a lot of things here,
-
but overall you'll see a couple of things stand out. First, there's the on that we have for our homepage. This on method is really just a shorthand that allows us to define a pattern.
-
So we could do something like slash movie, and it will allow us to redirect to a different URL or path for this specific path that we defined for this route.
-
So slash movie, we could send that off to somewhere else like imdb.com or something like that. We can render as we see with our homepage, a specific page that we provide in.
-
So this is rendering on a page@pages/home, which is that it works page that we see whenever we visit our web server in our browser. So we have that as an option. We have additional route information via property,
-
and we could set a handler for this route as well. But this on method is really just meant as a shorthand whenever there's one of those specific actions that you wanna provide for the route that you've defined.
-
If there's more meaningful work that you wanna do with that route, that's where we would wanna reach for something like an HTT verb to define the verb that would describe the routes actions and purpose or intent.
-
So for those we have get, which is meant for get requests, getting information or showing pages. We have post, which is meant for posting information
-
and is essentially used for creating records. Put, which is usually used for updating records. Patch, which is usually used for updating a single property on a record
-
or small batches of particular properties for a record. And then lastly, delete, which as you probably assume is used for deleting records. Now, whenever I say records,
-
I'm talking typically about a database. Databases are made up of tables. And as you might be familiar with tables, they have columns and they have rows.
-
Rows would make up the individual record in this particular use case. So you would add in a record or add in a row or delete a row, update a row, so on and so forth.
-
Those make up the different HTT verbs that we have as options for our route. The actual argument options for these are gonna be relatively the same throughout. So for our get request,
-
we're gonna have a pattern option and then we're gonna find a handler as the second argument. The pattern is what's used to match the route to the particular request.
-
For example, whenever we went to our homepage, it has a pattern of just slash, which matches the request for our homepage. But if we dive back into our browser
-
and we try to visit a URL at slash movies, we're gonna get an error. And that's because it cannot find a route matching the URL that we've tried to get. And it's at this point, you may be wondering why you see code blocks
-
over here on the right and you see specific information saying, you cannot get a specific URL. And we have this option to say, show more frames. Well, this is just a developer friendly environment
-
that AdonisJS provides to give us more contextual information as developers about the error that we've run into. Since we have our server running in a dev environment
-
and AdonisJS knows that, it's gonna serve us up some additional information to help us debug the issues that we run into. Whenever we actually deploy our application out into a production based environment
-
and it switches into a production environment for our server, it's gonna know not to show this and we'll be able to set different options that we could show the user instead of this particular page.
-
So don't worry, this is just a developer friendly page AdonisJS is showing us. It's not what the underlying user would see if this were an application running in production.
-
Okay, so we know that it cannot get slash movies. There's an extra slash on there, but that doesn't really matter. We could get rid of that as well. And we'd get the exact same thing.
-
So let's fix this by defining a route for slash movies. So let's hide our browser back away and let's set our get request to slash movies.
-
Now we need to define what we wanna do whenever we get a request going to slash movies. And that's where our handler comes into play. The handler can either be asynchronous or asynchronous function.
-
We'll go ahead and make ours async and it's provided contextual information that I'm gonna abbreviate as just CTX here about the particular request. This is also known as the HTTP context.
-
If we have a river, we'll get this tool tip within Visual Studio Code that says that this is a parameter for our function. We've called it CTX and its type is HTTP context.
-
If we type out CTX dot, you'll see a lot of things like auth, logger, params, request response, route, session, and view down here that we can use to determine
-
how we wanna handle this particular request. Request will contain information about the request. Things like headers, cookies, all of that fun stuff. Response will then allow us to define
-
how we wanna respond to the request. So whether that's sending JSON information, an image, a file, or really anything that you can think of that a server might send back.
-
Response is also useful for setting statuses for the HTTP response, cookies, headers, and all that fun stuff too. Session will allow us to get or set things onto the user's session
-
and view allows us to reach into the edge template system. But if we wanted to, we could just send back a simple string from this method that says my awesome movie,
-
and that would work a-okay too. So let's go ahead and give that a try. So let's give this a save. Since our server is watching our file system, it's gonna pick up that we made that change. So our server is ready to go for it.
-
We can jump back into our browser. We've defined our route for slash movies. So we should be good to give this page a refresh. And there we go, we get my awesome movie.
Routes and How To Create Them
We'll learn how to define routes within AdonisJS and how those routes work.
Join the Discussion 6 comments
-
Question, why I encountered error when I tried to make a request from REST Client or curl?
GET http://localhost:3333/movies http/1.1
It said,
The connection was rejected. Either the requested service isn’t running on the requested server/port, the proxy settings in vscode are misconfigured, or a firewall is blocking requests. Details: RequestError: connect ECONNREFUSED 127.0.0. 33.1-
Responding to fadli-hidayatullah
Hey Fadli! Are you using WSL by chance? If so, try giving
::1
in place ofhttp://localhost:3333
a shot. So, I think it'd be::
. You can also try enabling mirroring mode in WSL, noted here: 33/movieshttps://learn.microsoft.com/en-us/windows/wsl/networking#mirrored-mode-networking
1
-
-
-
Responding to chanbroset-prach
Hey Chanbroset-Prach! I believe that should just be the default IntelliSense which comes with VSCode.
1-
Responding to tomgobich
I installed IntelliSense as well but the suggestion when typing function is not much descriptive like yours when you hovering each method, you can see the description….
Ref: https://imgur.com/K5Kt6Ox
0-
Responding to chanbroset-prach
I believe that panel is called the "quick panel" in Intellisense. You may want to check through your VSCode User JSON settings to see if it may be disabled for you. You can find more info here:
https://code.visualstudio.com/docs/editor/intellisense#_customizing-intellisense
0
-
-
-