Node Node.js Runtime

Use JavaScript on the server with modules, files, packages, streams, and async APIs.

Lessons

Sign in to save progress
1 Node.js Tutorial 2 Node HOME 3 Node Intro 4 Node Get Started 5 Node JS Requirements 6 Node.js vs Browser 7 Node Cmd Line 8 Node V8 Engine 9 Node Architecture 10 Node Event Loop 11 Node Async 12 Node Promises 13 Node Async/Await 14 Node Error Handling 15 Node Modules 16 Node ES Modules 17 Node NPM 18 Node package.json 19 Node NPM Scripts 20 Node Manage Dependencies 21 Node Publish Packages 22 HTTP Module 23 HTTPS Module 24 File System (fs) 25 Path Module 26 OS Module 27 URL Module 28 Events Module 29 Stream Module 30 Buffer Module 31 Crypto Module 32 Timers Module 33 DNS Module 34 Assert Module 35 Util Module 36 Readline Module 37 Node ES6+ 38 Node Process 39 Node TypeScript 40 Node Advanced TypeScript 41 Node Lint & Formatting 42 Node Frameworks 43 Express.js 44 Middleware Concept 45 REST API Design 46 API Authentication 47 Node.js with Frontend 48 MySQL Get Started 49 MySQL Create Database 50 MySQL Create Table 51 MySQL Insert Into 52 MySQL Select From 53 MySQL Where 54 MySQL Order By 55 MySQL Delete 56 MySQL Drop Table 57 MySQL Update 58 MySQL Limit 59 MySQL Join 60 MongoDB Get Started 61 MongoDB Create DB 62 MongoDB Collection 63 MongoDB Insert 64 MongoDB Find 65 MongoDB Query 66 MongoDB Sort 67 MongoDB Delete 68 MongoDB Drop Collection 69 MongoDB Update 70 MongoDB Limit 71 MongoDB Join 72 GraphQL 73 Socket.IO 74 WebSockets 75 Node Advanced Debugging 76 Node Testing Apps 77 Node Test Frameworks 78 Node Test Runner 79 Node Env Variables 80 Node Dev vs Prod 81 Node CI/CD 82 Node Security 83 Node Deployment 84 Node Logging 85 Node Monitoring 86 Node Performance 87 Child Process Module 88 Cluster Module 89 Worker Threads 90 Microservices 91 Node WebAssembly 92 HTTP2 Module 93 Perf_hooks Module 94 VM Module 95 TLS/SSL Module 96 Net Module 97 Zlib Module 98 Real-World Examples 99 RasPi Get Started 100 RasPi GPIO Introduction 101 RasPi Blinking LED 102 RasPi LED & Pushbutton 103 RasPi Flowing LEDs 104 RasPi WebSocket 105 RasPi RGB LED WebSocket 106 RasPi Components 107 Node.js Cert 108 Node.js Certificate 109 Built-in Modules 110 EventEmitter (events) 111 Worker (cluster) 112 Cipher (crypto) 113 Decipher (crypto) 114 DiffieHellman (crypto) 115 ECDH (crypto) 116 Hash (crypto) 117 Hmac (crypto) 118 Sign (crypto) 119 Verify (crypto) 120 Socket (dgram, net, tls) 121 ReadStream (fs, stream) 122 WriteStream (fs, stream) 123 Server (http, https, net, tls) 124 Agent (http, https) 125 Request (http) 126 Response (http) 127 Message (http) 128 Interface (readline) 129 Node.js Compiler 130 Node.js Server 131 Node.js Quiz 132 Node.js Exercises 133 Node.js Practice Problems 134 Node.js Syllabus 135 Node.js Study Plan 136 Node.js Bootcamp

Node CI/CD

Node.js Runtime Lesson 81 of 136 ~10 min read

Overview

Automate install, lint, test, build, and deploy steps.

Node CI/CD is easiest to learn by reading the example, changing it, and observing the result.

Core Ideas

  • Understand what Node CI/CD changes.
  • Run the example.
  • Change one value.
  • Explain the result.

Step by Step

  1. Read the Node CI/CD example.
  2. Run it.
  3. Change it.
  4. Explain it.

Beginner Explanation

Node CI/CD prepares a Node.js app for real users.

Production Node.js needs environment variables, secrets, secure defaults, logs, process management, dependency checks, and repeatable deployment steps.

Beginners should separate development settings from production settings and never commit secrets.

Before You Start

  • Install a current LTS version of Node.js and check it with node -v.
  • Create a small practice folder so experiments do not mix with production code.
  • Know how to run a script with node filename.js and how to stop a server with Ctrl+C.
  • Use console.log, console.error, and clear variable names while learning.
  • For Node CI/CD, focus on the request, file, package, database, or async boundary that the lesson is teaching.

Key Node.js Concepts

  • Secrets belong in environment variables or secret managers, not code.
  • Production apps need a stable start command and a clear port setting.
  • Logs should help debugging without exposing passwords, tokens, or private data.
  • Dependency audits reduce known package risk.
  • CI/CD should run install, lint, test, and build steps before deployment.
  • The Node CI/CD checklist protects users after the app leaves your computer.

Plain-English Glossary

  • Runtime: the program that executes your JavaScript outside the browser.
  • Event loop: the scheduling system that lets Node coordinate async work.
  • Module: a file or package that exports reusable code.
  • Package: reusable code installed through npm or another package manager.
  • Request: data sent to a server by a browser, app, or API client.
  • Response: data, headers, and status code sent back by the server.
  • Stream: a way to process data piece by piece instead of all at once.
  • Environment variable: configuration passed from the system into the process.

What You Will Learn

  • Explain the purpose of the topic in one or two sentences.
  • Run or read a small Node.js example without getting lost.
  • Identify which values are inputs, outputs, configuration, or side effects.
  • Handle the most common success and failure path.
  • Apply Node CI/CD to a small script, API route, database call, test, deployment step, or real-time feature.

Where You Use This in Real Projects

You use Node CI/CD in API servers, admin dashboards, command-line tools, background jobs, file processors, database-backed apps, authentication systems, real-time dashboards, and deployment scripts.

In a real project, Node.js is rarely only one file. It usually has routes, services, modules, configuration, tests, logs, package scripts, and a hosting environment.

A practical beginner goal is to build a small JSON API, connect it to one data source, handle errors, add tests, and document how to run it.

Node.js Safety Notes

  • Do not commit .env files, passwords, API keys, tokens, private certificates, or database credentials.
  • Validate and sanitize user input before using it in files, commands, database queries, or rendered output.
  • Use query parameters or driver placeholders instead of building SQL with string concatenation.
  • Avoid blocking synchronous file or CPU-heavy work inside busy HTTP request handlers.
  • Keep dependencies updated and remove packages you no longer use.
  • Return clear errors to users, but keep stack traces and private server details out of public responses.

Beginner Mental Model

Think of Node CI/CD as one part of a server-side workflow.

A request, command, timer, file event, database result, or socket message enters your program; Node runs your JavaScript; async work finishes later; your code sends output or changes state.

When you feel stuck, ask: what started this code, what async work is waiting, what can fail, and what should the program send back?

Code Example

const config = {
  port: Number(process.env.PORT || 3000),
  nodeEnv: process.env.NODE_ENV || 'development',
  databaseUrl: process.env.DATABASE_URL
};

if (!config.databaseUrl && config.nodeEnv === 'production') {
  throw new Error('DATABASE_URL is required in production');
}

console.log(`Starting in ${config.nodeEnv} on port ${config.port}`);

Another Example

const lesson = {
  title: 'Node.js practice',
  level: 'beginner',
  complete: false
};

function markComplete(item) {
  return { ...item, complete: true };
}

console.log(markComplete(lesson));

More Practice Examples

Command-line input practice

const [, , topic = 'Node.js'] = process.argv;

console.log(`Today I am learning ${topic}.`);
console.log(`Run again with: node practice.js "HTTP Module"`);
  • process.argv reads values passed after the script name.
  • Default values keep beginner scripts from crashing when input is missing.
  • This is a good warm-up before building full command-line tools.

Small HTTP response practice

import { createServer } from 'node:http';

createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({ path: req.url, ok: true }));
}).listen(3000);
  • The server callback runs for each request.
  • Headers describe what kind of response is being sent.
  • JSON.stringify turns an object into text for the HTTP response body.

Safe async wrapper practice

async function runTask(taskName, task) {
  try {
    const result = await task();
    console.log(`${taskName} finished`, result);
  } catch (error) {
    console.error(`${taskName} failed:`, error.message);
  }
}
  • A wrapper keeps success and failure handling consistent.
  • Await only works inside async functions or top-level ES modules.
  • Logging the task name makes debugging easier.

Real-World Server Pattern

import express from 'express';

const app = express();
app.use(express.json());

const lessons = [
  { slug: 'node-intro', title: 'Node Intro', level: 'beginner' },
  { slug: 'node-http-module', title: 'HTTP Module', level: 'beginner' }
];

app.get('/api/lessons', (req, res) => {
  const level = req.query.level;
  const results = level ? lessons.filter(lesson => lesson.level === level) : lessons;
  res.json({ data: results });
});

app.use((error, req, res, next) => {
  console.error(error);
  res.status(500).json({ error: 'Something went wrong' });
});

app.listen(process.env.PORT || 3000);
  • The route keeps HTTP details in one place and returns a predictable JSON shape.
  • Query parameters let the client request a filtered result without changing the route.
  • The error middleware logs the real error on the server and sends a safe message to the client.
  • process.env.PORT lets hosting platforms choose the production port.
  • For Node CI/CD, replace the in-memory lessons array with the module, database, stream, or service being taught.

Example Explained

  • The Node CI/CD example starts by importing or defining the small tool it needs.
  • The code separates input, processing, and output so beginners can follow the flow.
  • Async examples show where the program waits and where errors should be caught.
  • Server examples show a request entering, logic running, and a response leaving.
  • Database and file examples keep user input away from unsafe string-built commands.

How to Read This Example

  1. Find the import statements first and identify whether they come from Node core, npm packages, or local files.
  2. Find the function or route that starts the work.
  3. Trace inputs such as req, process.argv, process.env, file paths, query values, or database filters.
  4. Find every await, callback, event, or stream because those are async boundaries.
  5. For Node CI/CD, change one value, run the example again, and explain why the output changed.

Checklist

  • Read the example and change one value.
  • Check the result in the browser.
  • Write down the rule you learned.

Common Mistakes

  • Skipping the example.
  • Changing many things at once.
  • Not checking the result.

Do and Don't

  • Do: practice Node CI/CD in a small script before adding it to a full application.
  • Do: keep async code readable and handle both success and failure paths.
  • Do: separate routes, services, database code, configuration, and tests as the project grows.
  • Do: log useful context for debugging while protecting private data.
  • Don't: block the event loop with heavy synchronous work in busy servers.
  • Don't: trust user input, uploaded files, request bodies, query strings, or environment values without checking them.

Practice Challenge

Practice the Node CI/CD example in a small scratch file, then explain what changed and why.

Try These Changes

  • Rename one variable and confirm the script still works.
  • Add one validation rule for missing or invalid input.
  • Add a success response and an error response.
  • Move one helper function into a separate module and import it.
  • For Node CI/CD, add one console log that explains the current step without exposing secrets.

Quick Check

  • Question: What is Node.js? Answer: A runtime that executes JavaScript outside the browser.
  • Question: Why is async important in Node.js? Answer: It lets slow I/O finish later without blocking all other work.
  • Question: What file usually stores npm scripts and dependencies? Answer: package.json.
  • Question: What should you do with secrets? Answer: Store them outside code, usually in environment variables or a secret manager.
  • Question: What should you identify first in Node CI/CD? Answer: The input, the async boundary, the output, and the failure path.

Debugging Checks

  • Read the first stack trace line that points to your file.
  • Check that Node is running from the project folder you expect.
  • Check package.json scripts, module type, dependency install state, and file paths.
  • Check whether the code needs await, return, try/catch, or an error middleware.
  • Check environment variables, port numbers, database connection strings, and request bodies.
  • For Node CI/CD, reduce the problem to the smallest script or route that still fails.

Mini Project

Build a deployment checklist for Node CI/CD: PORT, NODE_ENV, secrets, start script, logs, tests, dependency audit, and rollback note.

Mastery Check

  • You can explain Node CI/CD.
  • You can change the example.
  • You can debug the result.
Create a free account to save which lessons you've finished. Save my progress