Routes map URL patterns to actions. Derby routes are powered by Express. Within apps, routes are defined via the get
, post
, put
, and del
methods of the app created by derby.createApp()
.
app.get ( routePattern, callback(page, model, params, next) )
app.post ( routePattern, callback(page, model, params, next) )
app.put ( routePattern, callback(page, model, params, next) )
app.del ( routePattern, callback(page, model, params, next) )
routePattern
: A string containing a literal URL, an Express route pattern, or a regular expression. See Express's routing documentation for more info. Derby also supports transitional routes which can be passed in as an object with two string properties,from
andto
.
callback
: Function invoked when a request for a URL matching the appropriate HTTP method and pattern is received. Note that this function is called both on the server and the client.
page
: Object with the methodspage.render()
andpage.redirect()
. All app routes should call one of these two methods or pass control by callingnext()
.
model
: Derby model object
params
: An object containing the matching URL parameters. Theurl
,query
, andbody
properties typically available onreq
are also added to this object.
next
: A function that can be called to pass control to the next matching route. If this is called on the client, control will be passed to the next route defined in the app. If no other routes in the same app match, it will fall through to a server request.
Express is used directly on the server. On the client, Derby includes Express's route matching module. When a link is clicked or a form is submitted, Derby first tries to render the new URL on the client. AJAX requests will still go directly to the server.
Derby can also capture form submissions client-side. It provides support for post
, put
, and del
HTTP methods using the same hidden form field override approach as Express.
Unlike Express, which provides direct access to the req
and res
objects created by Node HTTP servers, Derby returns a page
object. This provide the same interface on the client and the server, so that route handlers may be executed in both environments.
page.render ( viewName )
viewName
: The name of the view to render, see Namespaces and files for more details.
page.renderStatic ( statusCode, content )
statusCode
: The HTTP status code to return.
content
: A string of HTML to render
page.redirect ( url, [status] )
url
: Destination of redirect. Like Express, may also be the string 'home' (which redirects to '/') or 'back' (which goes back to the previous URL).
status
: (optional) Number specifying HTTP status code. Defaults to 302 on the server. Has no effect on the client.
It is possible to directly use express middleware and get access to a Racer model.
For the most part, updating the URL client-side should be done with normal HTML links. The default action of requesting a new page from the server is canceled automatically if the app has a route that matches the new URL.
To update the URL after an action other than clicking a link, scripts can call methods on app.history
. For example, an app might update the URL as the user scrolls and the page loads more content from a paginated list.
app.history.push ( url, [render], [state], [e] )
app.history.replace ( url, [render], [state], [e] )
url
: New URL to set for the current window
render
: (optional) Re-render the page after updating the URL if true. Defaults to true
state
: (optional) A state object to pass to thewindow.history.pushState
orwindow.history.replaceState
method.$render
and$method
properties are added to this object for internal use when handlingpopstate
events
e
: (optional) An event object whosestopPropogation
method will be called if the URL can be rendered client-side
Derby's history.push
and history.replace
methods will update the URL via window.history.pushState
or window.history.replaceState
, respectively. They will fall back to setting window.location
and server-rendering the new URL if a browser does not support these methods. The push
method is used to update the URL and create a new entry in the browser's back/forward history. The replace
method is used to only update the URL without creating an entry in the back/forward history.
app.history.refresh ( )
Re-render the current URL client-side
For convenience, the navigational methods of window.history
can also be called on app.history
.
app.history.back ( )
- Call
window.history.back()
, which is equivalent to clicking the browser's back button
view.history.forward ( )
- Call
window.history.forward()
, which is equivalent to clicking the browser's forward button
Next ➔
view.history.go ( i )
Call
window.history.go()
i
: An integer specifying the number of times to go back or forward. Navigates back if negative or forward if positive