UNPKG

remote

Version:

Work on client-side files with a remote API server transparently

180 lines (123 loc) 5.32 kB
## Remote **Remote** is a simple CLI tool that enables you to work in local files while consuming an API from a remote server. An easy reverse proxy in Node, if you will. If you'd like, it can also start a simple local server for your files. Simply specify - the address of your local files server, or where I should start one - the address of your remote API - the address of where to start a reverse proxy - a directory, if you want me to start a local server - some regex rules that define which files to serve locally, which to fetch from the remote host - optionally, you can map requests to specific files with the mappings option It aims to solve the dreaded **cross domain request** problem, so you can freely *ajax* like you have a local server-side. ### Install npm install -g remote ### Quickstart After installing, create a `remote.json` configuration file (check the example folder) and simply call `remote`. ### Usage - command line remote [options] Options: -h, --help output usage information -V, --version output the version number -d, --directory [path] Path to a local folder. If defined, will serve files at server address. [undefined] -r, --remote [host:port] Address of the remote API [localhost:80] -p, --proxy [host:port] Address of the reverse proxy server [localhost:9001] -s, --server [host:port] Address of the static file server [localhost:9000] -m, --mapping Whether to use the mapping rules [false] -f, --file [remote.json] Specific configuration file [remote.json] ### Usage - configuration file (remote.json) See the example configuration file at the example folder. Read on for the possible options for your `remote.json` file. ### Bounces This is the simplest `remote.json`, with some bounce rules defined: { "directory" : "./src/", "remote" : {"host": "remote-api-host.com", "port": 80}, "bounces" : [ "public/.*", "assets/.*" ] } In this case, any call to `localhost:3000/public/(...)` or `localhost:3000/assets/(...)` will be *bounced* to your local files under `./src/`. Other URL's will be forwarded to `remote-api-host.com` ### Headers You may wish to send along some headers with your request. For example: { "directory" : "./src/", "remote" : {"host": "remote-api-host.com", "port": 80}, "headers": { "Host": "remote-api-host.com", "X-Secret-Header" : "awesome" }, "bounces" : [ "public/.*", "assets/.*" ] } These will be added to every request made by `remote`. ### Mappings A mapping is like a bounce rule, only more specific. You define what you want served given a request URL. For example: { "directory" : "./src/", "remote" : {"host": "remote-api-host.com", "port": 80}, "headers": { "Host": "remote-api-host.com", "X-Secret-Header" : "awesome" }, "bounces" : [ "public/.*", "assets/.*" ], "mapping": true, "mappings": { ".*/api/users/1/remove": {"result": "ok"}, ".*/api/users/.*":"./test/mocks/users-mock.json", ".*/files/.*":"./test/files/", ".*/public/js/awesome.js":"./src/special/path/awesome-2.js" } } As you can see, mappings can be: - A JSON object. - A path to any file. - A path to any directory (Remote will locate the requested file in the directory). When any of these URL's are requested, remote will serve the given resource. **Note that mappings take precedence over bounce rules!** You can disable all mappings setting `mapping` to **false**. ### Bounce to remote If you like to keep things complicated, you may use the `bounceToRemote: true` option in your configuration file. This will invert the `bounces` rules, so they will actually bounce to the remote API. All other requests will be forwarded to the local server. ### Other notes Command line options take precedence over `remote.json` options. Also, any command line option may be specified in the json configuration file. Have fun! ----------------- #### Note for Mac OS X users (or: *what to do when I get EMFILE errors*) OS X has a arbitrarily low limit for the amount of files that a process can open of 256. Use the `ulimit` command to check your current limit. For sites with large amounts of files, or in any situation when encountering **EMFILE** errors, simply issue: ulimit -n 2048 Or any such large value, before turning on remote. ----------------- ### Changelog: v 0.2.6: - Ignores query string on mapping. - Starting unit tests with jasmine-node. v 0.2.5: - Serves images correctly. Really, this time. - Accepts mapping with 'http://' to change to arbitrary host. v 0.2.4: - Serves images correctly (utf8 issue fix, thanks Augusto). v 0.2.3: - Accepts directory for mappings. v 0.2.1: - File update and options scope fix. - Mappings should work now when applied in a file. v 0.2.0: - **Breaking changes** in API. Old remote.json files wont work. - Better options syntax - Bring you own local server. Now you can use remote as a reverse proxy, only. - Many fixes. v 0.1.0: - Major rewrite. Nothing of note before this ;) - Using nodejitsu's http-proxy - Add the capability to map arbitrary url to arbitrary files or JSON - Add the capability to add request headers