Project Structure
In this lesson, we'll learn how AdonisJS uses our project to boot up and which folders and files within our project matter as we get started with learning AdonisJS 6
- Author
- Tom Gobich
- Published
- Jan 24
- Duration
- 3m 48s
Developer, dog lover, and burrito eater. Currently teaching AdonisJS, a fully featured NodeJS framework, and running Adocasts where I post new lessons weekly. Professionally, I work with JavaScript, .Net C#, and SQL Server.
Adocasts
Burlington, KY
Transcript
Project Structure
-
(upbeat music)
-
- So at this point, you're probably wondering
-
what all of these different files and folders
-
are specifically for,
-
but that's a lot of information to digest
-
at one particular point in time.
-
So let's go and walk through it slowly,
-
focusing specifically on the essentials
-
at this point in time.
-
So if we bring our terminal back up here,
-
we can see our server's still running.
-
If we stop our server, let's clear our browser out
-
and let's start it back up again, npm run dev.
-
But let's watch what happens within the terminal
-
immediately after we run this command.
-
It'll show just for a split second,
-
but you'll see something actually happens.
-
You'll see it runs a command,
-
then it runs through some stuff
-
that happens relatively quickly.
-
And then once we get to this point,
-
our server's booted and ready to receive requests.
-
That brief point in time between us running our command
-
and this final info stating that our server's ready
-
is called the boot process.
-
Small portions of our actual project structure
-
actually play a part within that boot process.
-
Although our AdonisJS server has one primary purpose,
-
which is to serve our web application
-
that we'll be building,
-
there's actually multiple different purposes
-
that it could be started for.
-
There is the command line interface called ACE
-
that AdonisJS has.
-
So our server could be started specifically
-
for ACE commands that are running.
-
There is also a test environment
-
that AdonisJS can start in from YAPA.
-
So there's really three different environments
-
that our server could be starting for.
-
And there's an entry point for each one of those
-
within our bin.
-
So you'll see console, which is for the ACLI,
-
server, which is for our web server,
-
and test, which is for the YAPA tests.
-
So within the boot process,
-
whenever we start our server up,
-
the first place it's going to hit
-
within our project structure is the bin directory.
-
One of these three files will execute
-
to actually start the underlying boot process
-
for our server.
-
And then once our server reaches the boot process,
-
it will move out of the bin folder.
-
And its next stop is gonna be the start directory.
-
The start directory is really all about registration.
-
It's where we're gonna be registering our routes,
-
middleware, events, so on and so forth.
-
At the start of our project,
-
if we go ahead and expand this folder,
-
you'll see that we have an env.ts,
-
kernel, and a routes file.
-
We'll talk more about the env.ts and kernel later on,
-
but at a high level, the env.ts
-
is where we can define type safety requirements
-
for underlying environment variables,
-
which are defined within our .env file.
-
If our .env file does not match the restrictions
-
that we have set within the env.ts,
-
our server will fail to boot
-
and it will warn us about the missing environment variables.
-
This is really a safeguard measure
-
to prevent your server from starting
-
without necessary information needed
-
for it to run successfully.
-
And then we have the kernel.ts,
-
which is primarily for our middleware registration,
-
but it also registers our global exception handler as well.
-
Again, more on those two later on.
-
Finally, the routes file is probably the one
-
that you care about most at this point in time.
-
It's where our route definitions are gonna take place.
-
And if we take a look at this,
-
we'll see one route already exists,
-
and that route is what's in charge of showing our homepage
-
that displays it works.
-
So if we hide our browser back away,
-
we'll see that this reads pretty much like plain English.
-
We have a router.
-
Whenever that router receives a request to slash,
-
which is also known as our homepage,
-
then it's telling it to render the file at pages/home.
-
Now, whenever we talk about render within our project,
-
that's gonna be going through the EdgeJS template system.
-
And by default, anytime that we provide page paths,
-
like we are right here with pages/home,
-
it's gonna look for those within the resources directory.
-
The resources directory contains our pages
-
as well as uncompiled CSS and JavaScript.
-
Edge won't just look within resources though,
-
it's also going to dive into the views directory.
-
So if we expand our views directory,
-
there's our pages directory right there,
-
and there's our home.edge file within there.
-
So we can go ahead and give this page a click,
-
and there's the HTML that makes up the page
-
that we see within our browser,
-
specifically noted by the it works right here.
-
Now, it's at this point in time,
-
you might be realizing that your document
-
doesn't quite look as colorful as mine.
-
It might be all one color.
-
That's where extensions come into play
-
for Visual Studio Code.
-
We'll talk about that in the next lesson.
-
Introduction
-
Fundamentals
-
2.0Routes and How To Create Them5m 23s
-
2.1Rendering a View for a Route6m 29s
-
2.2Linking Between Routes7m 51s
-
2.3Loading A Movie Using Route Parameters9m 17s
-
2.4Validating Route Parameters6m 6s
-
2.5Vite and Our Assets6m 38s
-
2.6Setting Up Tailwind CSS9m 5s
-
2.7Reading and Supporting Markdown Content4m 32s
-
2.8Listing Movies from their Markdown Files8m 51s
-
2.9Extracting Reusable Code with Services7m 4s
-
2.10Cleaning Up Routes with Controllers4m 52s
-
2.11Defining A Structure for our Movie using Models9m 38s
-
2.12Singleton Services and the Idea of Caching6m 11s
-
2.13Environment Variables and their Validation4m 16s
-
2.14Improved Caching with Redis10m 44s
-
2.15Deleting Items and Flushing our Redis Cache6m 46s
-
2.16Quick Start Apps with Custom Starter Kits6m 28s
-
2.17Easy Imports with NodeJS Subpath Imports8m 40s
-
-
Building Views with EdgeJS
-
3.0EdgeJS Templating Basics8m 49s
-
3.1HTML Attribute and Class Utilities6m 9s
-
3.2Making A Reusable Movie Card Component10m 24s
-
3.3Component Tags, State, and Props4m 53s
-
3.4Use Slots To Make A Button Component6m 56s
-
3.5Extracting A Layout Component5m 13s
-
3.6State vs Share Data Flow2m 59s
-
3.7Share vs Global Data Flow6m 7s
-
3.8Form Basics and CSRF Protection6m 13s
-
3.9HTTP Method Spoofing HTML Forms3m 3s
-
3.10Easy SVG Icons with Edge Iconify7m 57s
-
-
Database and Lucid ORM Basics
-
4.0Configuring Lucid and our Database Connection4m 3s
-
4.1Understanding our Database Schema9m 35s
-
4.2Introducing and Defining Database Migrations18m 35s
-
4.3The Flow of Migrations8m 28s
-
4.4Introducing Lucid Models5m 43s
-
4.5Defining Our Models6m 49s
-
4.6The Basics of CRUD11m 56s
-
4.7Defining Required Data with Seeders11m 11s
-
4.8Stubbing Fake Data with Model Factories13m 48s
-
4.9Querying Our Movies with the Query Builder15m 30s
-
4.10Unmapped and Computed Model Properties3m 24s
-
4.11Altering Tables with Migrations7m 6s
-
4.12Adding A Profile Model, Migration, Factory, and Controller2m 57s
-
4.13SQL Parameters and Injection Protection9m 19s
-
4.14Reusable Query Statements with Model Query Scopes8m 11s
-
4.15Tapping into Model Factory States9m 15s
-
4.16Querying Recently Released and Coming Soon Movies4m 59s
-
4.17Generating A Unique Movie Slug With Model Hooks7m 59s
-
-
Lucid ORM Relationships
-
5.0Defining One to One Relationships Within Lucid Models5m 49s
-
5.1Model Factory Relationships2m 54s
-
5.2Querying Relationships and Eager Vs Lazy Loading5m 17s
-
5.3Cascading and Deleting Model Relationships5m 16s
-
5.4Defining One to Many Relationships with Lucid Models6m 56s
-
5.5Seeding Movies with One to Many Model Factory Relationships5m 24s
-
5.6Listing A Director's Movies with Relationship Existence Queries8m 41s
-
5.7Listing and Counting a Writer's Movies8m 41s
-
5.8Using Eager and Lazy Loading to Load A Movie's Writer and Director5m 18s
-
5.9Defining Many-To-Many Relationships and Pivot Columns9m 48s
-
5.10Many-To-Many Model Factory Relationships4m 50s
-
5.11A Deep Dive Into Relationship CRUD with Models18m 5s
-
5.12How To Create Factory Relationships from a Pool of Data13m 55s
-
5.13How To Query, Sort, and Filter by Pivot Table Data9m 47s
-
-
Working With Forms
-
6.0Accepting Form Data12m 15s
-
6.1Validating Form Data with VineJS9m 29s
-
6.2Displaying Validation Errors and Validating from our Request7m 16s
-
6.3Reusing Old Form Values After A Validation Error2m 3s
-
6.4Creating An EdgeJS Form Input Component5m 28s
-
6.5Creating A Login Form and Validator5m 1s
-
6.6How To Create A Custom VineJS Validation Rule9m 7s
-
-
Authentication & Middleware
-
The Flow of Middleware7m 49s
-
Authenticating A Newly Registered User4m 14s
-
Checking For and Populating an Authenticated User2m 10s
-
Logging Out An Authenticated User2m 24s
-
Logging In An Existing User6m 54s
-
Remembering A User's Authenticated Session6m 55s
-
Protecting Routes with Auth, Guest, and Admin Middleware5m 36s
-
-
Filtering and Paginating Queries
Join The Discussion! (0 Comments)
Please sign in or sign up for free to join in on the dicussion.
Be the first to Comment!