{"id":129469,"date":"2026-05-06T09:31:26","date_gmt":"2026-05-06T09:31:26","guid":{"rendered":"\/my\/tutorials\/node-js-tutorial"},"modified":"2026-05-06T09:31:26","modified_gmt":"2026-05-06T09:31:26","slug":"node-js-tutorial","status":"publish","type":"post","link":"\/my\/tutorials\/node-js-tutorial","title":{"rendered":"Node.js tutorial: How to start using Node.js after installation"},"content":{"rendered":"<p>Node.js brings JavaScript to the server side, letting you run scripts, handle requests, and build backend logic from the terminal.<\/p><p>Once you install Node.js on your preferred environment, whether it&rsquo;s your local computer, a virtual private server (VPS), or a managed hosting service, you can start running scripts, creating servers, and managing packages right away.<\/p><p>Here&rsquo;s what you&rsquo;ll do after setting up Node.js:<\/p><ol class=\"wp-block-list\">\n<li>Write and run your first Node.js script.<\/li>\n\n\n\n<li>Read files using built-in modules like <strong>fs<\/strong>.<\/li>\n\n\n\n<li>Build a basic HTTP server from scratch.<\/li>\n\n\n\n<li>Install and use third-party packages with <strong>npm<\/strong>.<\/li>\n\n\n\n<li>Understand how Node.js handles asynchronous code.<\/li>\n\n\n\n<li>Choose what to build next, like a REST API or a full-stack app.<\/li>\n<\/ol><p><\/p><h2 class=\"wp-block-heading\" id=\"h-what-is-node-js\">What is Node.js<\/h2><p>Node.js is a free, open-source, cross-platform JavaScript runtime environment that lets you run JavaScript outside a web browser. It uses Google&rsquo;s V8 engine to compile code directly into machine code.<\/p><p>Before <a href=\"\/my\/tutorials\/what-is-node-js\" data-wpel-link=\"internal\" rel=\"follow\">Node.js<\/a> launched in 2009, JavaScript stayed inside the browser, handling tasks like button clicks and page updates. <\/p><p>Node.js changed that by bringing JavaScript to the server side, where it can read files, connect to databases, and power backend logic.<\/p><p>Today, developers use Node.js to build REST APIs, real-time apps, command-line tools, and scalable network services. Its architecture handles many simultaneous connections efficiently without creating a separate thread for each one.<\/p><h2 class=\"wp-block-heading\" id=\"h-how-to-run-node-js-applications\">How to run Node.js applications<\/h2><p>You can run Node.js in three main environments: locally on your computer, on a remote server like a VPS, or through a managed hosting platform. Each option fits a different stage of development and deployment.<\/p><h3 class=\"wp-block-heading\">How to run Node.js locally for development<\/h3><p>Running Node.js locally is the go-to setup for development and testing. You can get started in a few minutes:<\/p><ol class=\"wp-block-list\">\n<li>Download the Long Term Support (LTS) version from the <a href=\"https:\/\/nodejs.org\/en\/download\" data-wpel-link=\"external\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">official Node.js website<\/a>.<\/li>\n<\/ol><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69fb2d6d78c78\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/05\/1778058512907-0.png\" alt=\"The Node.js download page showing a supported installer for macOS\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ol class=\"wp-block-list\">\n<li>Install it using the package for your operating system.<\/li>\n\n\n\n<li>Open a terminal and run <strong>node -v<\/strong> to verify the installation. If it returns a version number, Node.js is ready to use.<\/li>\n<\/ol><h3 class=\"wp-block-heading\">How to run Node.js on Ubuntu<\/h3><p>A VPS gives you a remote server environment where you can deploy and run Node.js apps in production. You connect to it over SSH from your local terminal.<\/p><p>Here&rsquo;s the general process to <a href=\"\/my\/tutorials\/how-to-install-nodejs-ubuntu\" data-wpel-link=\"internal\" rel=\"follow\">install Node.js on Ubuntu<\/a>:<\/p><ol class=\"wp-block-list\">\n<li>Connect to your VPS via SSH.<\/li>\n\n\n\n<li>Install Node.js using a package manager or a version manager like NVM.<\/li>\n\n\n\n<li>Run your app with the <strong>node<\/strong> command.<\/li>\n<\/ol><h3 class=\"wp-block-heading\">How to run Node.js using managed hosting<\/h3><p>Managed hosting takes Node.js server configuration off your plate. The hosting provider handles the runtime environment, dependencies, and deployment pipeline for you.<\/p><p>For example, <a data-wpel-link=\"internal\" href=\"\/my\/web-apps-hosting\" rel=\"follow\">Hostinger&rsquo;s managed Node.js hosting<\/a> handles <strong>npm<\/strong> builds, environment variables, and automatic vulnerability monitoring.<\/p><p>It also supports other JavaScript frameworks, such as React, Vue.js, Angular, Next.js, Express.js, and NestJS, so you can set it up once and run everything in one place.<\/p><p>To <a href=\"\/support\/how-to-deploy-a-nodejs-website-in-hostinger\" data-wpel-link=\"internal\" rel=\"follow\">deploy a Node.js website on Hostinger<\/a>, follow these steps:<\/p><ol class=\"wp-block-list\">\n<li>Purchase a <strong>Business<\/strong> or <strong>Cloud Startup<\/strong> hosting plan.<\/li>\n\n\n\n<li>Navigate to <strong>Websites &rarr; Add Website &rarr; Node.js Web App<\/strong> in hPanel.<\/li>\n\n\n\n<li>Connect a GitHub repository or upload a compressed project file.<\/li>\n<\/ol><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69fb2d6d7928c\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/05\/1778058512913-1.png\" alt=\"Hostinger's hPanel showing options to deploy a Node.js web app: Import Git repository or upload the compressed files\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ol start=\"4\" class=\"wp-block-list\">\n<li>Confirm the auto-detected build settings for your framework.<\/li>\n<\/ol><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69fb2d6d7954e\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/05\/1778058515919-2.png\" alt=\"Hostinger's hPanel showing the auto-detected build settings for the Node.js web app\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ol start=\"5\" class=\"wp-block-list\">\n<li>Click <strong>Deploy<\/strong> to build and launch your Node.js app.<\/li>\n<\/ol><?xml encoding=\"utf-8\" ?><figure class=\"wp-block-image size-full\"><a href=\"\/my\/web-hosting\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2023\/11\/Web-hosting_in-text-banner.png\" alt=\"Hostinger web hosting banner\" class=\"wp-image-98604\" srcset=\"https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/11\/Web-hosting_in-text-banner.png 1024w, https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/11\/Web-hosting_in-text-banner-300x88.png 300w, https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/11\/Web-hosting_in-text-banner-150x44.png 150w, https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/11\/Web-hosting_in-text-banner-768x225.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><h2 class=\"wp-block-heading\" id=\"h-how-to-create-your-first-node-js-script\">How to create your first Node.js script<\/h2><p>Writing a script is your first hands-on step after installing Node.js. You can start with a single file and one line of code, and you&rsquo;ll have a working script.<\/p><ol class=\"wp-block-list\">\n<li>Open a terminal on your machine and create a new file with the <a href=\"\/my\/in\/tutorials\/how-to-install-and-use-nano-text-editor\" data-wpel-link=\"internal\" rel=\"follow\">nano text editor<\/a>:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">nano hello.js<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Type the following line inside the editor:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">console.log('Hello, World!');<\/pre><ol start=\"3\" class=\"wp-block-list\">\n<li>Save the file and exit <strong>nano<\/strong> by pressing <strong>Ctrl + X &rarr; Ctrl + Y &rarr; Enter<\/strong>.<\/li>\n\n\n\n<li>Run the script:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">node hello.js<\/pre><p>The terminal should show:<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69fb2d6d7ad1b\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/05\/1778058518925-3.png\" alt=\"The terminal showing the node hello.js command's output: \"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p><strong>console.log()<\/strong> prints text to the terminal. You&rsquo;ve probably used it in browser dev tools before, but here it runs directly on your machine instead of inside a browser.<\/p><p>If you&rsquo;re on a local computer and prefer using a graphical code editor like VS Code or Sublime Text, create <strong>hello.js<\/strong> there instead. <\/p><p>Save the file, open a terminal, navigate to the file&rsquo;s folder with <strong>cd path\/to\/folder<\/strong>, and run the same <strong>node hello.js<\/strong> command.<\/p><h2 class=\"wp-block-heading\" id=\"h-how-to-use-node-js-modules\">How to use Node.js modules<\/h2><p>In Node.js, modules let you break your code into reusable components. Node.js includes dozens of built-in modules, such as <strong>fs<\/strong> for file system operations, <strong>http<\/strong> for creating servers, and <strong>path<\/strong> for working with file paths.<\/p><p>To see one in action, use the <strong>fs<\/strong> module. First, create a file called <strong>sample.txt<\/strong> with some content:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">This is a sample text file.<\/pre><p>Next, create <strong>read-file.js<\/strong> in the same folder:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const fs = require('fs');\n\nconst content = fs.readFileSync('sample.txt', 'utf8');\nconsole.log(content);<\/pre><p>The first line imports the built-in <strong>fs<\/strong> module using <strong>require()<\/strong>. Then, <strong>readFileSync()<\/strong> reads the file and returns its contents as a string.<\/p><p>The <strong>utf8<\/strong> argument specifies how Node.js should read the file. Without it, you&rsquo;d get something like <strong><\/strong>, which represents the file&rsquo;s content as raw bytes instead of readable text.<\/p><p>Once done, run the following command in your terminal:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">node read-file.js<\/pre><p>The terminal prints whatever you added to <strong>sample.txt<\/strong>.<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69fb2d6d7b41a\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/05\/1778058521932-4.png\" alt=\"The terminal showing the node read-file.js command's output: \"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h2 class=\"wp-block-heading\" id=\"h-how-to-create-a-basic-server-with-node-js\">How to create a basic server with Node.js<\/h2><p>Building an HTTP server with Node.js is where things start to feel like real backend development. To do this, include the built-in <strong>http<\/strong> module in your file.<\/p><ol class=\"wp-block-list\">\n<li><strong>Create the server file<\/strong>. Make a file called <strong>server.js<\/strong> and add the following:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const http = require('http');\n\nconst hostname = '127.0.0.1';\nconst port = 3000;\n\nconst server = http.createServer((req, res) =&gt; {\n   res.statusCode = 200;\n   res.setHeader('Content-Type', 'text\/plain');\n   res.end('Hello from Node.js server!n');\n});\n\nserver.listen(port, hostname, () =&gt; {\n   console.log(`Server running at http:\/\/${hostname}:${port}\/`);\n});<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Start the server by running this command:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">node server.js<\/pre><p>You should see &ldquo;<strong>Server running at http:\/\/127.0.0.1:3000\/<\/strong>.&rdquo;<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Open it in a browser<\/strong>. Visit <strong>http:\/\/127.0.0.1:3000\/<\/strong>, and you&rsquo;ll see &ldquo;Hello from Node.js server!&rdquo; on the page.<\/li>\n<\/ol><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69fb2d6d7b8f6\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/05\/1778058524936-5.png\" alt=\"The browser showing the \"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>The server keeps running until you stop it with <strong>Ctrl+C<\/strong> in the terminal.<\/p><p>Here&rsquo;s what each part of <strong>server.js<\/strong> does:<\/p><ul class=\"wp-block-list\">\n<li>The hostname <strong>127.0.0.1<\/strong> means the server only accepts connections from your local machine.<\/li>\n\n\n\n<li><strong>http.createServer()<\/strong> creates the server. The callback runs every time a client sends a request.<\/li>\n\n\n\n<li><strong>res.statusCode = 200<\/strong> sets the HTTP status code to 200 (OK), indicating that the request succeeded.<\/li>\n\n\n\n<li><strong>res.setHeader(&lsquo;Content-Type&rsquo;, &lsquo;text\/plain&rsquo;)<\/strong> tells the browser the response is plain text, not HTML.<\/li>\n\n\n\n<li><strong>res.end()<\/strong> sends the response body and closes the connection.<\/li>\n\n\n\n<li><strong>server.listen()<\/strong> starts the server and binds it to the specified port and hostname.<\/li>\n<\/ul><p>If you&rsquo;re running this on a VPS, change the hostname to <strong>0.0.0.0<\/strong>. After saving the file, open the port in your <a data-wpel-link=\"internal\" href=\"\/my\/tutorials\/how-to-configure-firewall-on-ubuntu-using-ufw\" rel=\"follow\">Uncomplicated Firewall (UFW)<\/a>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo ufw allow 3000<\/pre><p>Then open a browser and go to <strong>http:\/\/your-vps-ip:3000\/<\/strong>.<\/p><p>Hostinger VPS users can find their IP address in hPanel by going to <strong>VPS &rarr; Manage &rarr; Overview &rarr; VPS details<\/strong>.<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69fb2d6d7bcc5\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/05\/1778058527942-6.png\" alt=\"Hostinger's hPanel showing the server's IP address in the VPS details section\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><?xml encoding=\"utf-8\" ?><figure class=\"wp-block-image size-large\"><a href=\"\/my\/vps-hosting\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2023\/02\/VPS-hosting-banner-1024x300.png\" alt=\"\" class=\"wp-image-77934\" srcset=\"https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/02\/VPS-hosting-banner.png 1024w, https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/02\/VPS-hosting-banner-300x88.png 300w, https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/02\/VPS-hosting-banner-150x44.png 150w, https:\/\/www.hostinger.com\/my\/tutorials\/wp-content\/uploads\/sites\/45\/2023\/02\/VPS-hosting-banner-768x225.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><h2 class=\"wp-block-heading\" id=\"h-how-to-install-and-use-packages-with-npm\">How to install and use packages with npm<\/h2><p><a href=\"\/my\/tutorials\/what-is-npm\" data-wpel-link=\"internal\" rel=\"follow\">Node Package Manager (npm)<\/a> comes bundled with Node.js and gives you access to over two million open-source packages.<\/p><p>Unlike built-in modules like <strong>fs<\/strong> or <strong>http<\/strong>, third-party packages must be installed with <strong>npm<\/strong> before you can use them. Here&rsquo;s how:<\/p><ol class=\"wp-block-list\">\n<li><strong>Create a project folder<\/strong>. Through the terminal, create a new folder in your home directory and open it:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mkdir node-project\ncd node-project<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Initialize the project.<\/strong> Run this command to generate a <strong>package.json<\/strong> file with default settings:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npm init -y<\/pre><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69fb2d6d7ccca\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/05\/1778058530949-7.png\" alt=\"The terminal showing the npm init y- command's output\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Think of <strong>package.json<\/strong> as your project&rsquo;s manifest. It tracks dependencies, scripts, and metadata in one place.<\/p><ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Install a package.<\/strong> For this example, install <strong>dayjs<\/strong>, a lightweight date manipulation library:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npm install dayjs<\/pre><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69fb2d6d7cfbc\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/05\/1778058533956-8.png\" alt=\"The terminal showing the npm install dayjs command's output\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>This command downloads the package into a <strong>node_modules<\/strong> folder, adds <strong>dayjs<\/strong> to the <strong>dependencies<\/strong> field in <strong>package.json<\/strong>, and creates a <strong>package-lock.json<\/strong> file that locks the exact installed version.<\/p><ol start=\"4\" class=\"wp-block-list\">\n<li><strong>Use the package in your code.<\/strong> Create a file called <strong>index.js<\/strong>:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const dayjs = require('dayjs');\n\nconst now = dayjs().format('MMMM D, YYYY');\nconsole.log(`Today is ${now}`);<\/pre><p>When you call <strong>require(&lsquo;dayjs&rsquo;)<\/strong>, Node.js looks for the package in the <strong>node_modules<\/strong> folder.<\/p><p>After that, run <strong>node index.js<\/strong>. You&rsquo;ll see the current date:<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69fb2d6d7d274\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/05\/1778058536960-9.png\" alt=\"The terminal showing the node index.js command's output: \"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><h2 class=\"wp-block-heading\" id=\"h-how-does-node-js-handle-asynchronous-code\">How does Node.js handle asynchronous code?<\/h2><p>Node.js handles asynchronous code by running slower operations in the background while the rest of your code keeps moving. Here&rsquo;s a quick example:<\/p><p>First, create <strong>async-example.js<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">console.log('First');\n\nsetTimeout(() =&gt; {\n   console.log('Second (after 2 seconds)');\n}, 2000);\n\nconsole.log('Third');<\/pre><p>Next, run node <strong>async-example.js<\/strong> to see this output:<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69fb2d6d7d566\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/05\/1778058539967-10.png\" alt=\"The terminal showing the node async-example.js command's output\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Notice that &ldquo;Third&rdquo; prints before &ldquo;Second&rdquo; even though it comes later in the code. This happens because <strong>setTimeout()<\/strong> schedules the callback for &ldquo;Second&rdquo; to run after 2,000 milliseconds, and Node.js doesn&rsquo;t wait for it to finish.<\/p><p>It registers the timer, moves to the next line, and prints &ldquo;Third&rdquo; right away. After two seconds, the callback runs and &ldquo;Second&rdquo; appears.<\/p><p>This non-blocking model lets a single Node.js server handle thousands of connections simultaneously. While one request waits for a database query, a file read, or a network call, the server continues processing other requests.<\/p><h2 class=\"wp-block-heading\" id=\"h-what-to-build-after-learning-node-js-basics\">What to build after learning Node.js basics<\/h2><p>Once you&rsquo;re comfortable with the Node.js fundamentals, the best way to level up is to build something real. Here are four solid directions:<\/p><ul class=\"wp-block-list\">\n<li><strong>Build a REST API.<\/strong> Use the <strong>http<\/strong> module or a framework such as Express.js to create endpoints for <strong>GET<\/strong>, <strong>POST<\/strong>, <strong>PUT<\/strong>, and <strong>DELETE<\/strong> requests. This forms the foundation of most backend work with Node.js and is widely used in projects, such as the<a href=\"\/my\/tutorials\/wordpress-rest-api\" data-wpel-link=\"internal\" rel=\"follow\"> <\/a><a href=\"\/my\/tutorials\/wordpress-rest-api\" data-wpel-link=\"internal\" rel=\"follow\">WordPress REST API<\/a>.<\/li>\n\n\n\n<li><strong>Create a full-stack application.<\/strong> Combine Node.js with a frontend framework like React or Vue.js. Build something small, like a to-do list or a notes app that reads from and writes to a database. This helps you understand how to separate the frontend and backend and how they work together.<\/li>\n\n\n\n<li><strong>Package your app with Docker.<\/strong> <a href=\"\/my\/tutorials\/how-to-use-node-js-with-docker\" data-wpel-link=\"internal\" rel=\"follow\">Running your Node.js app in a Docker container<\/a> keeps dependencies consistent across environments. What works on your local computer will work the same way as your production server, even if you&rsquo;re moving to a different server. This solves the classic &ldquo;it works on my machine&rdquo; problem.<\/li>\n\n\n\n<li><strong>Deploy to a live server.<\/strong> Move beyond local development by<a href=\"\/my\/tutorials\/deploy-node-js-application\" data-wpel-link=\"internal\" rel=\"follow\"> <\/a><a href=\"\/my\/tutorials\/deploy-node-js-application\" data-wpel-link=\"internal\" rel=\"follow\">deploying your Node.js app<\/a> to a VPS or a managed hosting service. Here, you&rsquo;ll work with environment variables, process management, and production configuration. You&rsquo;ll also learn how to push code updates and redeploy your app.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Node.js brings JavaScript to the server side, letting you run scripts, handle requests, and build backend logic from the terminal. Once you install Node.js on your preferred environment, whether it&rsquo;s your local computer, a virtual private server (VPS), or a managed hosting service, you can start running scripts, creating servers, and managing packages right away. [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/my\/tutorials\/node-js-tutorial\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":411,"featured_media":129470,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Node.js tutorial: Start using Node.js after installation","rank_math_description":"Learn how to use Node.js after installation. Run your first script, create a server, and use modules and packages with step-by-step practical examples.","rank_math_focus_keyword":"node js tutorial","footnotes":""},"categories":[22639],"tags":[],"class_list":["post-129469","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vps"],"hreflangs":[{"locale":"en-US","link":"https:\/\/www.hostinger.com\/tutorials\/node-js-tutorial","default":1},{"locale":"en-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/node-js-tutorial","default":0},{"locale":"en-MY","link":"https:\/\/www.hostinger.com\/my\/tutorials\/node-js-tutorial","default":0},{"locale":"en-UK","link":"https:\/\/www.hostinger.com\/uk\/tutorials\/node-js-tutorial","default":0},{"locale":"en-IN","link":"https:\/\/www.hostinger.com\/in\/tutorials\/node-js-tutorial","default":0},{"locale":"en-CA","link":"https:\/\/www.hostinger.com\/ca\/tutorials\/node-js-tutorial","default":0},{"locale":"en-AU","link":"https:\/\/www.hostinger.com\/au\/tutorials\/node-js-tutorial","default":0},{"locale":"en-NG","link":"https:\/\/www.hostinger.com\/ng\/tutorials\/node-js-tutorial","default":0}],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/posts\/129469","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/users\/411"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/comments?post=129469"}],"version-history":[{"count":0,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/posts\/129469\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/media\/129470"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/media?parent=129469"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/categories?post=129469"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/my\/tutorials\/wp-json\/wp\/v2\/tags?post=129469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}