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:

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.

Introduced properties

fun default_file: nullable String

popcorn :: StaticHandler :: default_file

Default file to serve if nothing matches the request.
protected fun default_file=(default_file: nullable String)

popcorn :: StaticHandler :: default_file=

Default file to serve if nothing matches the request.
init defaultinit(static_dir: String, default_file: nullable String)

popcorn :: StaticHandler :: defaultinit

fun file_server: FileServer

popcorn :: StaticHandler :: file_server

Internal file server used to lookup and render files.
protected fun file_server=(file_server: FileServer)

popcorn :: StaticHandler :: file_server=

Internal file server used to lookup and render files.
fun static_dir: String

popcorn :: StaticHandler :: static_dir

Static files directory to serve.
protected fun static_dir=(static_dir: String)

popcorn :: StaticHandler :: static_dir=

Static files directory to serve.

Redefined properties

redef type SELF: StaticHandler

popcorn $ StaticHandler :: SELF

Type of this instance, automatically specialized in every class

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type BODY: Serializable

popcorn :: Handler :: BODY

Kind of objects returned by deserialize_body
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
fun all(req: HttpRequest, res: HttpResponse)

popcorn :: Handler :: all

Handler to all kind of HTTP request methods.
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun default_file: nullable String

popcorn :: StaticHandler :: default_file

Default file to serve if nothing matches the request.
protected fun default_file=(default_file: nullable String)

popcorn :: StaticHandler :: default_file=

Default file to serve if nothing matches the request.
init defaultinit(static_dir: String, default_file: nullable String)

popcorn :: StaticHandler :: defaultinit

fun delete(req: HttpRequest, res: HttpResponse)

popcorn :: Handler :: delete

DELETE handler.
fun deserialize_body(req: HttpRequest, res: HttpResponse): nullable BODY

popcorn :: Handler :: deserialize_body

Deserialize the request body
fun file_server: FileServer

popcorn :: StaticHandler :: file_server

Internal file server used to lookup and render files.
protected fun file_server=(file_server: FileServer)

popcorn :: StaticHandler :: file_server=

Internal file server used to lookup and render files.
fun get(req: HttpRequest, res: HttpResponse)

popcorn :: Handler :: get

GET handler.
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun post(req: HttpRequest, res: HttpResponse)

popcorn :: Handler :: post

POST handler.
fun put(req: HttpRequest, res: HttpResponse)

popcorn :: Handler :: put

PUT handler.
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
fun static_dir: String

popcorn :: StaticHandler :: static_dir

Static files directory to serve.
protected fun static_dir=(static_dir: String)

popcorn :: StaticHandler :: static_dir=

Static files directory to serve.
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
fun validate_body(req: HttpRequest, res: HttpResponse): nullable String

popcorn :: Handler :: validate_body

Validate body input with validator
fun validator: nullable DocumentValidator

popcorn :: Handler :: validator

Validator used to check body input
protected fun validator=(validator: nullable DocumentValidator)

popcorn :: Handler :: validator=

Validator used to check body input
package_diagram popcorn::StaticHandler StaticHandler popcorn::Handler Handler popcorn::StaticHandler->popcorn::Handler core::Object Object popcorn::Handler->core::Object ...core::Object ... ...core::Object->core::Object

Ancestors

interface Object

core :: Object

The root of the class hierarchy.

Parents

abstract class Handler

popcorn :: Handler

Class handler for a route.

Class definitions

popcorn $ StaticHandler
# 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