Prompt To Build

Create real apps with AI

Chapter 14: Beyond the Browser - JavaScript on the Server and Desktop

JavaScript Everywhere: Node.js and Desktop Applications

JavaScript, once confined to the browser, has broken free and now powers a vast ecosystem of applications beyond the web. This chapter will introduce you to Node.js, which allows JavaScript to run on servers, and touch upon frameworks that enable JavaScript for desktop applications. You'll learn how to prompt AI to generate code for these environments, expanding your reach as a JavaScript developer.

Node.js: JavaScript on the Server

Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. It allows you to run JavaScript code outside of a web browser, typically for server-side applications, command-line tools, and backend services. This means you can use a single language (JavaScript) for both your frontend (browser-based) and backend (server-based) development, a concept known as "full-stack JavaScript."

Setting up Node.js on an External Server

To deploy your Node.js application, you'll typically need a server. Here's a simplified guide:

  1. Choose a Hosting Provider: Select a hosting provider that supports Node.js. Popular options include Heroku, AWS (Amazon Web Services), Google Cloud, DigitalOcean, and Vultr.
  2. Set up a Server:
    • For VPS (Virtual Private Server): You'll get full control over the server. Install Node.js using a package manager like apt (on Debian/Ubuntu) or yum (on CentOS/RHEL). Example:
      sudo apt update
      sudo apt install nodejs npm
                                      
    • For Platform-as-a-Service (PaaS): Services like Heroku simplify deployment. You typically push your code to their platform, and they handle the server setup.
  3. Transfer Your Code: Use tools like git or scp to transfer your Node.js application files to the server.
  4. Install Dependencies: Navigate to your application directory on the server and run:
    npm install
                            
    This command installs all the necessary packages listed in your package.json file.
  5. Start Your Application: Use a process manager like pm2 or forever to keep your Node.js application running even if the server restarts. Example:
    npm install -g pm2
    pm2 start your_app.js
                            

Working with Shared Hosting (No Bash Access)

If you're limited to a shared hosting environment without direct Bash access, using Node.js can be tricky, but not impossible. Here are a few strategies:

  1. Check for Node.js Support: Some shared hosting providers offer limited Node.js support through their control panel (e.g., cPanel). Look for options to run Node.js applications.
  2. Use a Pre-built Application: If your hosting provider allows, deploy a pre-built Node.js application (like a simple Express server) via FTP or their file manager. Then, configure it through available control panel settings.
  3. Consider Serverless Functions: If shared hosting is a must, explore serverless functions (like AWS Lambda or Netlify Functions). These allow you to run JavaScript code on the server without managing the server itself. You can trigger these functions via HTTP requests from your frontend.

Desktop Applications with JavaScript

JavaScript isn't just for web servers; it can also create desktop applications. Frameworks like Electron and NW.js allow you to build cross-platform desktop apps using web technologies (HTML, CSS, JavaScript).

  1. Electron: Uses Chromium and Node.js to create desktop applications. Popular for apps like VS Code, Slack, and Discord.
  2. NW.js (Node-Webkit): Another framework for building desktop apps with web technologies.

Bundling for Stand-alone Apps

To distribute your desktop application, you'll need to bundle it into a stand-alone executable. Both Electron and NW.js provide tools for this:

  • Electron: Use electron-packager or electron-builder to package your app for different platforms (Windows, macOS, Linux).
  • NW.js: Provides a command-line tool to bundle your application into a single executable.

These tools package your application code, the Node.js runtime, and the necessary Chromium files into a single, distributable package.

Prompting AI for Server and Desktop Code

Now, let's see how you can use AI to generate code for Node.js and desktop applications.

Example 1: Creating a Simple Node.js Server

Goal: Generate a basic HTTP server using Node.js and Express.

Prompt:

Generate a Node.js application using Express that listens on port 3000 and returns "Hello, World!" for all requests. Include comments to explain each step.
                

AI-Generated Code (Expected):

const express = require('express'); // Import the Express library
const app = express(); // Create an Express application
const port = 3000; // Define the port number

// Define a route that responds with "Hello, World!" for all requests
app.get('/', (req, res) => {
  res.send('Hello, World!');
});

// Start the server and listen on the specified port
app.listen(port, () => {
  console.log(`Server listening at http://localhost:${port}`);
});
                

Example 2: Building a Simple Desktop App with Electron

Goal: Generate a basic Electron application that displays "Hello, World!" in a window.

Prompt:

Generate a basic Electron application that creates a window and displays "Hello, World!" in the window. Include comments to explain each step.
                

AI-Generated Code (Expected):

const { app, BrowserWindow } = require('electron');

function createWindow () {
  // Create a new browser window
  let win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true
    }
  });

  // Load the HTML file
  win.loadFile('index.html');
}

// When the app is ready, create the window
app.on('ready', createWindow);

// HTML file (index.html):
// <!DOCTYPE html>
// <html>
// <head>
//   <title>Hello, World!</title>
// </head>
// <body>
//   <h1>Hello, World!</h1>
// </body>
// </html>
                

Summary

JavaScript's versatility extends far beyond the browser. With Node.js, you can build powerful server-side applications, and with frameworks like Electron, you can create cross-platform desktop apps. By leveraging AI to generate code for these environments, you can significantly expand your capabilities as a JavaScript developer.