
Develop a real-world eco-friendly blog using Angular, Node.js, and MariaDB with offline support, meta and Open Graph tags, an admin panel for CRUD operations, and server-side rendering.
Explore essential Visual Studio Code extensions for Angular development, including angular files, angular language service, John Papa snippets, auto rename tag, breakage pair colorized, path intelligence, prettier, and eslint.
Explore building the basics of the client app in Angular, covering routes, components, styling with CSS, and services, with notes on Node and Angular versions.
Check your Node.js and Angular versions, install Angular CLI 7.3.6, create a new energy blog app with routing and CSS, and run ng serve --open to verify the app.
Initialize a local repository and commit changes to manage source control. Generate core blog components—navigation bar, article list, and footer—and wire routing to display the home page content.
Set up article list and about routes in Angular, update the navigation with routerLink, and switch views using the router outlet for seamless page transitions.
Center the blog header and navigation, style the body with margins and a max-width of 800px, and apply a clean font family while refining link colors and hover states.
Create an article class for blog posts with id, title, key, date, content, description, and a featured image. Populate mock articles and show them in the article list component.
Display and style the article list by rendering each article as a card with an image, title, date, and teaser, then refine CSS for layout, borders, and typography.
Add an article service to fetch articles as an observable and replace direct access in the article list component, wiring mock data and preparing a single-article view.
Create an article component and implement router links to article keys, configure routes to load articles via activated route parameters, and extend an article service to fetch mock articles.
Get a single article from the ArticleService by key using an observable. Filter the articles array to the first match and provide user feedback for not found cases.
Create a 404 not found page by adding a not-found component, configuring a wildcard route, and redirecting unknown URLs to the home page with clear feedback.
Display a single article on the page by rendering the featured image, title, date, and content using string interpolation and innerHTML, then test by viewing the article in the blog.
Style a single article by adding article, image, title, and meta info classes; center the image and apply global CSS to typography and paragraph spacing for a polished blog post.
Publish your Angular blog built with components, routing, services, and CSS that you created yourself, and then proceed to add meta and Open Graph tags.
Set the title and meta and Open Graph tags for blog pages to inform search engines and social platforms. Use the Facebook sharing debugger to verify tags.
Add a title service and shared title logic to an Angular blog app to set the browser tab title for articles, lists, and about pages, with updates on navigation.
Learn how the Facebook debugger previews social shares by inspecting Open Graph tags, titles, images, and descriptions, and optimize meta text for accurate posting.
Add meta tags to the article component, setting the title, description, and Open Graph properties (type, url, image, site name) with a base URL. Validate rendering with Angular Universal SSR.
Learn to set meta and Open Graph tags for search engines and social platforms, understand the logic behind them, and implement them with Angular Universal.
Activate server side rendering with Angular Universal to render on the server and deliver a complete source code to the client, enabling SEO, social sharing, and improved performance on mobile.
Create a universal angular app for server-side rendering using a single command from the angular universal guide, generating a node express server and updated project files.
Explore how Angular Universal renders pages on the server, compare server-side rendered output with the default client app, and run the universal app locally.
Compare server-side rendered versus client-side rendered blog pages, showing server-side rendering delivers faster load times on mobile networks, especially under fast 3G and slow 3G conditions.
Leverage server side rendering to boost performance and search engine visibility, while using tags and client side rendering during development and preparing the back end for publication.
Create a new project for the web service and implement the first REST API calls in the Angular client. Cover the software development process and cross-origin resource sharing.
Create a new project folder and build a web service with the Express framework, install Express with npm, and start the server while preparing for API calls.
Make your first api call by defining a get handler for the root resource /, returning a simple text response, and test it on localhost:1000 with a 200 status.
Install nodemon to monitor code changes and automatically restart your node server. After globally installing nodemon with npm, run nodemon server.js instead of node server.js to enable live reloads.
Create an articles.js module exported with module.exports, import it in server.js, and set up app.get to return all articles. Use a mock articles.js array to test the API.
Implement a get request to fetch a single article by key from the articles resource, filtering the array and returning the first match, then test via chrome and developer tools.
Extend the article service in the Angular client to call rest endpoints using the http client. Tackle cross-origin resource sharing issues and fetch both article lists and single articles.
Implement a CORS policy by installing the course module, configuring origins for localhost:4200 and 4000, and applying app.use with these options to enable cross-origin requests.
Build and test a REST API to fetch articles, integrate cards in the Angular client, enable auto-restarts, and configure CORS as you prepare to add MariaDB ORM.
Install MariaDB and HeidiSQL for database setup, create a new web log database, map models to tables, configure the connection, and create the articles table to fetch and update articles.
Install MariaDB from mariadb.org and set up HeidiSQL to manage databases, then create a new local database called energy block with a root password and no remote access.
Install sequelize and the MariaDB dialect, configure it as an ORM for articles in JavaScript, and initialize, authenticate, and run queries against the database.
Model the articles table by defining an article model with title, key, date, date_time, content, description, and image, with equalize auto-creating the id and timestamps, and synchronizing the table.
Seed the articles table by syncing the table, inserting two mock articles via the article model's create method, and force dropping and recreating the table to prevent duplicate seeds.
Fetch all articles from database by implementing a get articles method using the article model's findAll with date descending, returning results via a callback and wiring Sequelize on the server.
Implement and export get article by key to fetch a single article from the database using find one with a key, guided by an optional options object and a callback.
Add a view count integer to the article model and increment it on article retrieval using Sequelize, updating the view count and handling null values for a real-world blog.
Master the Maria database setup and usage as you connect the Angular client to the web service and database, then prepare for full CRUD operations with an administration dashboard.
We complete all CRUD operations and add features by building new components and service modules for the Angular client and Node.js web service within the administration dashboard.
Create three new components—the dashboard, article overview, and added article—to build the admin interface. Configure routing and navigation to expose the dashboard and article overview, with authentication later.
Create and integrate a dashboard service in Angular to fetch articles from the Node.js server, implement the dashboard overview endpoint, and render the results in the article overview.
Add a published boolean field to articles, defaulting to false, so drafts stay hidden from the public. Update article queries to return only published items while the dashboard shows drafts.
Add an environment variable for the API URL in environment.ts and wire it into the article and dashboard services, replacing localhost calls and testing the client app.
Implement the article overview in the dashboard as a table-like list with image, title, date, views, and a published state dot, using ngFor and class bindings for status.
Implement publish and unpublish for articles in Angular app, update the client and server, toggle the published state via a dashboard service post request, and configure body-parser on the server.
Implement the edit article component in angular 8, add routing and a form for title, key, date, image, description, and content using two-way ngModel binding with dashboard service.
Explore implementing an update article workflow: add an update button, wire it to a service call, handle responses, and provide user feedback with a saved indicator and article preview.
Add a preview button in the edit article component, implement navigation to a dashboard preview route, and distinguish between published and unpublished articles using the dashboard service.
Implement a delete article feature in the admin dashboard by adding a delete method in the dashboard service and client, with server route integration and user confirmation.
Implement a dashboard article creation flow by adding a post method and using secret.js to create articles, handling title, key, dates, image, description, content, and save-as-draft logic.
Automatically update the article key from the title, applying lowercase and spaces to dashes, on key up and blur, and show a 150-character description count with online/offline status.
Implement authentication to secure the administration dashboard after enabling CRUD ops, environment variables, and iterative improvements to blog components and services.
Create a user model, register users, and enable login to the dashboard with credentials. Introduce JSON web tokens, test API calls with postman, and implement middleware with an angular interceptor.
Create a Sequelize user model with name, password, and salt as non-null fields, initialize it, and create the users table; passwords will be hashed later for authentication.
Register a user by adding a new user with a lowercase user name, a salt, and a hashed password using pbkdf2, then save via sequelize and enable login verification.
Learn how to use Postman to set up an API development environment, create collections, and execute a POST request to register a user with a JSON body.
Implement a login endpoint that reads name and password, hashes with salt via crypto, and returns true or false; this preps for token-based authentication in the next lecture.
Describe how JSON Web Tokens (JWT) use a public and private key pair (RSA) to sign and verify tokens, including header, payload, and signature, for secure authorization and API access.
Sign the json web token with the private key using the jsonwebtoken library, embedding the user name in the payload, and set a 12-hour rs256 expiry for verification.
Verify jwt tokens by loading a public key, setting verify options (expires in 12 hours, algorithm IRS to 5 6 9), and enforcing authorization via the dashboard authorization header.
Create an isAuthenticated.js middleware to verify JSON web tokens from the authorization header, returning unauthorized if invalid and calling next() to protect dashboard routes.
Develop a functional user login feature in an angular 8 app by creating a login component and authentication service, wiring routing, http calls, and token handling.
Define a user model with name and password, bind it to a login form, validate inputs, display 'username or password is wrong' errors, and retrieve a token on successful login.
Store the token in local storage when available, and attach it to the authorization header for dashboard requests. Then navigate to the dashboard after saving the token.
Build an HTTP interceptor that clones requests and adds the authorization header from local storage. Configure it in providers as an HTTP interceptor with multi: true and test the token.
Protect the dashboard with an authentication guard using canActivate, implement a guard service, check token validity via the web service, and redirect unauthenticated users to the login page.
Implement authentication with JSON web tokens, store hashed passwords, and verify tokens to grant dashboard access; use an Angular interceptor and middleware to streamline security and deploy the app.
Publish your Angular web app on a Windows server by hosting the web service, build the client as a server-side rendered version, and verify with the Facebook sharing debugger.
Install IIS node on Windows Server, download the 64-bit msi, run as administrator to add a new site to IIS, then test localhost/notes and node express samples.
Deploy a Node.js web service on IIS by relocating sources, configuring a web.config, and updating port settings; test endpoints with Chrome and Postman, and publish the Angular client next.
Publish an angular universal app on iis by configuring production environment variables and api endpoints, building server-side rendering, and deploying the server and browser assets.
Fix the interceptor to render article content server-side by making it injectable and only adding the authorization header when a token exists, restoring Open Graph data.
Learn to use the Facebook sharing debugger to fetch and test Open Graph data for your articles. Verify the title, image, and description, and ensure social media previews render correctly.
Build a blog with angular universal, Node.js, and MariaDB; render on the server, implement a Node.js web service, perform CRUD, add JSON web token authentication, and deploy to Windows server.
Update angular 7 to 8 using the angular update tool, verify current and target versions with ng --version, and apply updates to @angular/cli and @angular/core, noting TypeScript moves to 3.5.
"This course was well designed and gave very in-depth classes on specific features of Angular and Node. I found each section clear and easy to follow and the project really wrapped up everything in a fun to code along project!"
⭐⭐⭐⭐⭐ - Robin Labonde
Welcome the Angular 8 Real World WebApp Development with Node.js & MariaDB course!
In this course, we’ll focus on building a real-world web application with the tools Angular and Node.js provide.
We will build an SEO friendly blog, which means we're going to use Angular Universal to build a server-side rendered front end.
In the back end, we're going to use Node.js for the web service, we store our data in a MariaDB and to map our objects with the database, we’re going to use the object-relational mapping library Sequelize.
And finally, we publish the whole thing on a Windows Server with IISNode.
The web application itself will be a blog that could be extended to a big news or magazine web application.
We start with displaying some articles and later on we'll build an administration dashboard with authentication (we're using JSON Web Tokens to be more specific) and the option to create new articles, modify them, and so on.
Let's have a deeper look at what you are going to learn in this course:
The Basic Blog
In this section, we will start with our Angular project and develop the blog, so that it will work offline - without any web service or database. In essence, you could already publish this blog if you want to add all your blog posts within your Angular app.
Meta & Open Graph Tags
As the title may already imply, here we will add meta tags and open graph tags. So the information that search engines and social media platforms need to find your blog and display your articles properly when they are shared.
Keep in mind though, that these tags won’t necessarily work if you stick with a client-side rendered Angular app. Google promised to be able to crawl client-side rendered Angular web applications, but by the experience of many blogs and developers, we are not there yet.
Apart from that, social media platforms still need proper source code or tags to scrape your site properly.
Angular Universal
A short but important section - we will implement server-side rendering (SSR) here. That’s what Angular Universal is all about. When you finished implementing server-side rendering, your tags will be available in the source of your blog and your pages will also render much faster.
Back end with Node.js
It’s time for the backend. We’ll create a new project, the web service with Node.js. Now the articles will come from the web service.
Database & ORM with MariaDB & Sequelize
We expand the web service and finally connect our web application with a database so that the articles are now stored in a MariaDB. Additionally, we will use Sequelize for the object relational mapping between our models and the database tables.
Administration Dashboard
In essence, the blog works with all layers. We have the client, the web service and the database. But adding new articles and modifying them is a bit cumbersome. So let’s add an administration panel where we get an overview of all articles and where we can create, update and delete them - this means, building all CRUD operations.
Authentication
The administration dashboard works, but until now, everybody could use it. In this section, we change that by adding authentication with JSON web tokens. Also, we’re going to introduce Angular interceptors, route guards and a small middleware.
IISNode
Finally, we are able to deploy our blog. In this section, you’re going to learn how to build and publish the Angular Universal client and the Node web service on a Windows Server with Internet Information Services.
What tools are we using?
All the tools we're going to use in this course are available for free.
Visual Studio Code - A source-code editor developed by Microsoft for Windows, Linux, and macOS. We will use this code editor for the Angular client application as well as the Node.js web service.
HeidiSQL - A free and open-source administration tool we will use and install together with MariaDB. It's perfectly suited to see the data we're going to store in the database.
Postman - A greate choice for API testing. Later during this course, we will use Postman to run API calls against the Node.js web service.
Google Chrome - It's not necessary to use Google Chrome, any web browser with developer tools is useful here. We're going to use the developer tools for its console output and inspecting the HTML of our web application.
Git - This one's totally optional. I recommend using Git as source control. You can use it locally or push your code to a hoster like GitHub. The complete code written in this course is available on GitHub, for instance.
Who is this course for?
This course is suited for students who...
...already have a little experience with Angular
...want to up their game with Angular and Node.js
...learn the skills to build a modern web application with Angular, Node.js, MariaDB and Sequelize from the ground up
...want to create a portfolio website or private blog completely on their own without using any third-party services
Who is the instructor?
Patrick is an experienced web developer who has been working in this field for over 15 years. With several courses on Udemy, over 30.000 students and more than 3.000 reviews, he knows what you are looking for in a course about web development. He works full-time as full stack developer at a market research company in Germany, teaches online courses on Udemy and YouTube, and also gives one-on-one online lectures. Let's see, what other students are saying:
⭐⭐⭐⭐⭐
"Patrick is an incredibly gifted programmer and educator. He writes code effortlessly and does a beautiful job of explaining concepts, the code structure, and how everything interacts with each other. He is patient and supportive and can efficiently work with beginners and people with more advanced skill. If you want to learn any aspects of programming, you MUST contact Patrick. He’s among the best instructors I’ve ever worked with, and I give him my highest recommendation." - Mike
⭐⭐⭐⭐⭐
"Very good, easy pace, and easy to understand! this is the good course for beginner and intermediate developers. Thank you!" -Tri
⭐⭐⭐⭐⭐
"Quick and useful course getting someone upto speed on WCF RESTful services. I like this course as the instructor Patrick just gets to the crux of the topics without padding with unnecessary discussions. When people are limited by time to spend on a course, this is the kind of course that is ideally looked up to. Very good course! Thank you!" - Sundararajan
⭐⭐⭐⭐⭐
"Patrick is a great instructor in that he is organized, knows his stuff, and takes the time to explain everything in detail. Great course for beginning WCF developers!" - Evarardo
⭐⭐⭐⭐⭐
"I like the pace, the simplicity of piece by piece introductions and the author's speaking pace & clarity. very nice!" - Stephen
⭐⭐⭐⭐⭐
"Love the way you go through each step one short video at a time - makes it more rewarding and easier to digest and break down if need be. Also appreciate your thorough responses to others' questions! Great job, I look forward to seeing more videos like this because I am learning a ton from you! Thank for all of your hard work and dedication!" - Adrienne
⭐⭐⭐⭐⭐
"Single Page Application (SPA) has become a very important requirement for web application projects. This course has given me a very good example on how to create a "SPA". The whole process is covered since creating the project, the HTML page, the detailed creation of each file til its deployment. Very good. I recommend it for systems analysts who are starting to use this concept of SPA, just like me. If something in your solution does not work it's because you're doing something wrong. Everything works fine, the instructor is clear and gives us good and complete information. For me, the course was excellent." - Michel
⭐⭐⭐⭐⭐
"As always, a course by Patrick God is a good choice for learning. I had a chance to watch another courses from him and I have to say, I did the right thing choosing this guy.He is very straight forward, speak well, and let me understand quickly all what I need." - Paulo