Functions
Navi exports two functions for working with routes.
resolve()
resolve(
urlOrUrls: string | string[],
options: {
routes: Matcher<Context>
basename?: string
context?: Context
body?: any,
headers?: { [name: string]: string },
method?: string,
followRedirects?: boolean,
}
): Promise<Route>Resolve allows you to find the route that corresponds to a given request. It doesn’t require access to a navigation object, letting you find Route objects on demand. Instead, it requires that you pass it a routes Matcher, and also allows you to set a context and basename — just as you can when creating a Navigation object.
By default, resolve() will not follow redirects, but instead return a Route object with a type of 'redirect'. To make it follow redirects, you can pass it a { followRedirects: true } option.
crawl()
crawl(options: {
// Configuration for the routes to crawl
routes: Matcher<Context>
basename?: string
context?: Context
// The bottom-most URL that should be crawled.
root?: string | URLDescriptor
// Allows you to specify that some items (and their children) should
// not be cawled.
predicate?: (request: CrawlItem) => boolean
// Allows you to crawl patterns like `/resource/:id` by returning array
// of URLs to crawl in their place.
expandPattern?: (
pattern: string,
) => undefined | string[] | Promise<undefined | string[]>
// Options to set on the default `request` objects.
headers?: { [name: string]: string }
hostname?: string
method?: string
// Should the output URLs have a trailing slash added or removed?
// By default, it is removed.
trailingSlash?: 'add' | 'remove' | null
}): Promise<{
paths: string[]
redirects: {
[name: string]: string
}
}>Returns a Promise to an object containing all of the paths within the given routes object.
At a high level, the crawl() function works by generating requests for patterns in each of your mount() matchers. These request objects can be distinguished from standard request objects, as they’ll have a crawler property that contains the function that maps patterns to further requests.
By default, requests generated by crawl() will also have a method of 'HEAD'.
The crawl() function is used by navi-scripts to build the list of URLs that should be statically rendered.
withCrawlerPatterns()
You can also configure the crawler’s behavior for a specific mount() matcher by use of the withCrawlerPatterns() matcher.
To use withCrawlerPatterns(), you should compose it with the mount() that you want to configure, and pass in a list of functions that expand patterns to their available strings. For example:
//
compose(
withCrawlerPatterns({
'/:tag': async ({ context }) => {
let tags = await context.api.getTags()
return tags.map(tag => '/'+tag)
}
}),
mount({
'/:tag': lazy(() => import('./tagRoute'))
})
)The functions supplied to withCrawlerPatterns() will only be called during a crawl() — they will not be called during standard routing.
