Serving static files in Kitura
In a web application, we will require resources such as images, HTML files, CSS files, and JavaScript files. These are static files, as they can be delivered to the user without needing to be modified, or generated and can be provided to the user with Kitura's built-in StaticFileServer
middleware. This guide will show you how to configure and register a static file server on your Kitura server.
If you don't have a Kitura server, follow our Create a server guide.
Step 1: Create a directory for our files
The first thing we are going to need is a static file to serve. By default the static file server looks in the "public" directory, so let's create that now.
From the root directory of your project, where Package.swift
is located, create the public directory:
mkdir public
Change into the directory:
cd public
Create a new file called hello.html
:
touch hello.html
Open this file in your preferred text editor (we will use Xcode):
open hello.html -a Xcode.app
Inside this file, add the following text:
<!DOCTYPE html>
<html>
<body>
<h1>Hello World!</h1>
</body>
</html>
In this example, we will serve an HTML file, however, this could be any file type.
If you are using Xcode and used the command line to create your public directory you will need to regenerate your Xcode project:
swift package generate-xcodeproj
This is to enable Xcode to detect the new directory.
Step 2: Register a static file server on our router
The StaticFileServer
middleware is built into Kitura. To use it we just need register it on our router.
Open your Application.swift
file in your default text editor (or Xcode if you prefer):
open Sources/Application/Application.swift
Inside the postInit()
function add:
router.all("/public", middleware: StaticFileServer())
That's it! Now, we will serve any files from the project's public
directory (since this is the default path) from the /public
route on our server.
We are using public for both the route and directory, however these could be set to anything.
For example, if you wanted to serve files from the assets
folder from the '/internal' route, you could use the following code:
router.all("/internal", middleware: StaticFileServer(path: "./assets"))
Step 3: Test serving a static file
To test our static file server, we can view the HTML file we created earlier.
We do this by running our server, then opening our browser at:
localhost:8080/public/hello.html
We should see our HTML document with the "Hello World!" message.
The StaticFileServer
also loads files from subdirectories of the project's public
directory, so all we need to do is place a file into a subdirectory e.g. ./public/images/picture.png
and it will be served at localhost:8080/public/picture.png.
Next steps
Stencil: Learn how to add Stencil templating to your Kitura application.
Markdown: Learn how to add Markdown templating to your Kitura application.