Provide example code for a node.js web app.
Here's a very basic Express (a popular Node.js web framework) app:
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('Example app listening on port 3000!');
});

This will start a server and listen on port 3000. It responds with Hello World! for requests to the homepage (/).
You would run it with node app.js (where app.js is the name of the file containing this code).
Obviously this is a very simple example, you'd add more routes, serve static files, connect to a database, etc. for a real app. But this gives you the basic structure.
Write the example code again, except add support to static files in the /public directory.

Also add support for not having a .html extension at the ending of the URL.
Sure, here's an example code for a Node.js web app with support for serving static files from the /public directory and without requiring a .html extension in the URL:

const express = require('express');
const path = require('path');
const app = express();

// Serve static files from the 'public' directory
app.use(express.static(path.join(__dirname, 'public')));

// Set up a route to serve the homepage
app.get('/', (req, res) => {
  res.sendFile(path.join(__dirname, 'public/index.html'));
});

// Allow routes without a .html extension to work
app.use((req, res, next) => {
  if (!req.path.includes('.') && req.path !== '/') {
    req.url += '.html';
  }
  next();
});

// Start the server and listen on port 3000
app.listen(3000, () => {
  console.log('Example app listening on port 3000!');
});

In this example, the express.static middleware is used to serve static files from the /public directory, and the path module is used to construct file paths. The route for the homepage sends the index.html file, which is located in the /public directory. The middleware function at the bottom of the code checks whether the requested URL contains a file extension and, if not, adds a .html extension to the URL. This allows URLs without a .html extension to work, as requested.