Considerations for basePath
editConsiderations for basePath
editAll communication from the Kibana UI to the server needs to respect the
server.basePath. Here are the "blessed" strategies for dealing with this
based on the context:
<img> and <a> elements
editWrite the src or href urls as you would without the base path, but then
replace src or href with kbn-src or kbn-href.
<img kbn-src="plugins/kibana/images/logo.png">
Getting a static asset url
editUse webpack to import the asset into the build. This will give you a URL in JavaScript and gives webpack a chance to perform optimizations and cache-busting.
// in plugin/public/main.js
import uiChrome from 'ui/chrome';
import logoUrl from 'plugins/facechimp/assets/banner.png';
uiChrome.setBrand({
logo: `url(${logoUrl}) center no-repeat`
});
API requests from the front-end
editUse chrome.addBasePath() to append the basePath to the front of the url.
import chrome from 'ui/chrome';
$http.get(chrome.addBasePath('/api/plugin/things'));
Server side
editAppend request.getBasePath() to any absolute URL path.
const basePath = server.config().get('server.basePath');
server.route({
path: '/redirect',
handler(request, reply) {
reply.redirect(`${request.getBasePath()}/otherLocation`);
}
});
BasePathProxy in dev mode
editThe Kibana dev server automatically runs behind a proxy with a random
server.basePath. This way developers will be constantly verifying that their
code works with basePath, while they write it.
To accomplish this the serve task does a few things:
-
change the port for the server to the
dev.basePathProxyTargetsetting (default5603) -
start a
BasePathProxyatserver.port-
picks a random 3-letter value for
randomBasePath -
redirects from
/to/{randomBasePath} -
redirects from
/{any}/app/{appName}to/{randomBasePath}/app/{appName}so that refreshes should work -
proxies all requests starting with
/{randomBasePath}/to the Kibana server
-
picks a random 3-letter value for
This proxy can sometimes have unintended side effects in development, so when
needed you can opt out by passing the --no-base-path flag to the serve task
or yarn start.
yarn start --no-base-path