I am using iisnode to host a node web application in IIS on Windows. When I set up my routes on the web server (say Express or Restify) I want do do it in a way that is independent of the path that IIS is hosting the application at.
For example, my application could be hosted at two different paths on two machines running IIS; the first could host it at /foo
and the second at /bar
. Say my application wants to set up a route at /baz
- on the first machine I would need to configure the route at /foo/baz
and on the second I would have to use /bar/baz
which means duplicating some of the configuration held in IIS.
Is it possible to reliably work out the path from within an application hosted with iisnode so that I can calculate the correct routes to set up? Or is there another technique I can use to avoid needing to do so?
I am not aware of a way to avoid seeing the path segment corresponding to the virtual directory within your node.js application hosted in iisnode. The best way to ensure your application code is host agnostic is to host it at the root of an IIS web site.
@GraemeF: This is a little hacky, but this is who I got around this limitation.
First, I added a global variable to my app called home:
Then, I set up my routes using the home variable:
Then, it's just a matter of setting the deployPath appSetting in your apps web.config:
Machine 1:
Machine 2:
You can manually set the value on each machine, have your build process set the value, or even add the setting to the target machine's global web.config.
Both express and restify allow the definition of paths with regex. By using regex paths you can avoid prefix issues entirely.
Instead of
use
and there'll be no need for any magic.
This answer suggests getting the path from the
web.config
file.Also, this link might be of some help as well: