To serve static files such as images, CSS files, and JavaScript files, use the
Popcorn built-in handler StaticHandler
.
Pass the name of the directory that contains the static assets to the StaticHandler
init method to start serving the files directly.
For example, use the following code to serve images, CSS files, and JavaScript files
in a directory named public
:
var app = new App
app.use("/", new StaticHandler("public/"))
Now, you can load the files that are in the public
directory:
http://localhost:3000/images/trollface.jpg
http://localhost:3000/css/style.css
http://localhost:3000/js/app.js
http://localhost:3000/hello.html
Popcorn looks up the files relative to the static directory, so the name of the
static directory is not part of the URL.
To use multiple static assets directories, add the StaticHandler
multiple times:
app.use("/", new StaticHandler("public/"))
app.use("/", new StaticHandler("files/"))
Popcorn looks up the files in the order in which you set the static directories
with the use
method.
To create a virtual path prefix (where the path does not actually exist in the file system)
for files that are served by the StaticHandler
, specify a mount path for the
static directory, as shown below:
app.use("/static/", new StaticHandler("public/"))
Now, you can load the files that are in the public directory from the /static
path prefix.
http://localhost:3000/static/images/trollface.jpg
http://localhost:3000/static/css/style.css
http://localhost:3000/static/js/app.js
http://localhost:3000/static/hello.html
However, the path that you provide to the StaticHandler
is relative to the
directory from where you launch your app.
If you run the app from another directory, it’s safer to use the absolute path of
the directory that you want to serve.
popcorn :: StaticHandler :: default_file
Default file to serve if nothing matches the request.popcorn :: StaticHandler :: default_file=
Default file to serve if nothing matches the request.popcorn :: StaticHandler :: defaultinit
popcorn :: StaticHandler :: file_server
Internal file server used to lookup and render files.popcorn :: StaticHandler :: file_server=
Internal file server used to lookup and render files.popcorn :: StaticHandler :: static_dir=
Static files directory to serve.popcorn $ StaticHandler :: SELF
Type of this instance, automatically specialized in every classcore :: Object :: class_factory
Implementation used byget_class
to create the specific class.
popcorn :: StaticHandler :: default_file
Default file to serve if nothing matches the request.popcorn :: StaticHandler :: default_file=
Default file to serve if nothing matches the request.core :: Object :: defaultinit
popcorn :: Handler :: defaultinit
popcorn :: StaticHandler :: defaultinit
popcorn :: Handler :: deserialize_body
Deserialize the request bodypopcorn :: StaticHandler :: file_server
Internal file server used to lookup and render files.popcorn :: StaticHandler :: file_server=
Internal file server used to lookup and render files.core :: Object :: is_same_instance
Return true ifself
and other
are the same instance (i.e. same identity).
core :: Object :: is_same_serialized
Isself
the same as other
in a serialization context?
core :: Object :: is_same_type
Return true ifself
and other
have the same dynamic type.
core :: Object :: output_class_name
Display class name on stdout (debug only).popcorn :: StaticHandler :: static_dir=
Static files directory to serve.popcorn :: Handler :: validate_body
Validate body input withvalidator
popcorn :: Handler :: validator
Validator used to check body inputpopcorn :: Handler :: validator=
Validator used to check body input
# Static files server.
#
# To serve static files such as images, CSS files, and JavaScript files, use the
# Popcorn built-in handler `StaticHandler`.
#
# Pass the name of the directory that contains the static assets to the StaticHandler
# init method to start serving the files directly.
# For example, use the following code to serve images, CSS files, and JavaScript files
# in a directory named `public`:
#
# ~~~
# var app = new App
# app.use("/", new StaticHandler("public/"))
# ~~~
#
# Now, you can load the files that are in the `public` directory:
#
# ~~~raw
# http://localhost:3000/images/trollface.jpg
# http://localhost:3000/css/style.css
# http://localhost:3000/js/app.js
# http://localhost:3000/hello.html
# ~~~
#
# Popcorn looks up the files relative to the static directory, so the name of the
# static directory is not part of the URL.
# To use multiple static assets directories, add the `StaticHandler` multiple times:
#
# ~~~
# app.use("/", new StaticHandler("public/"))
# app.use("/", new StaticHandler("files/"))
# ~~~
#
# Popcorn looks up the files in the order in which you set the static directories
# with the `use` method.
#
# To create a virtual path prefix (where the path does not actually exist in the file system)
# for files that are served by the `StaticHandler`, specify a mount path for the
# static directory, as shown below:
#
# ~~~
# app.use("/static/", new StaticHandler("public/"))
# ~~~
#
# Now, you can load the files that are in the public directory from the `/static`
# path prefix.
#
# ~~~raw
# http://localhost:3000/static/images/trollface.jpg
# http://localhost:3000/static/css/style.css
# http://localhost:3000/static/js/app.js
# http://localhost:3000/static/hello.html
# ~~~
#
# However, the path that you provide to the `StaticHandler` is relative to the
# directory from where you launch your app.
# If you run the app from another directory, it’s safer to use the absolute path of
# the directory that you want to serve.
class StaticHandler
super Handler
# Static files directory to serve.
var static_dir: String
# Default file to serve if nothing matches the request.
#
# `null` for no default file.
var default_file: nullable String
# Internal file server used to lookup and render files.
var file_server: FileServer is lazy do
var srv = new FileServer(static_dir)
srv.show_directory_listing = false
srv.default_file = default_file
return srv
end
redef fun handle(route, uri, req, res) do
var answer = file_server.answer(req, route.uri_root(uri))
if answer.status_code == 200 then
res.status_code = answer.status_code
res.header.add_all answer.header
res.files.add_all answer.files
res.send
else if answer.status_code != 404 then
res.status_code = answer.status_code
end
end
end
lib/popcorn/pop_handlers.nit:174,1--262,3