Repository files navigation

Couchbase Node.js travel-sample Application REST Backend

This is a sample application for getting started with Couchbase Server and the Node.js SDK. The application runs a single page web UI for demonstrating SQL for Documents (N1QL), Sub-document requests and Full Text Search (FTS) querying capabilities. It uses Couchbase Server together with the Express web framework for Node.js, Swagger for API documentation, Vue and Bootstrap.

The application is a flight planner that allows the user to search for and select a flight route (including the return flight) based on airports and dates. Airport selection is done dynamically using an autocomplete box bound to N1QL queries on the server side. After selecting a date, it then searches for applicable air flight routes from a previously populated database. An additional page allows users to search for Hotels using less structured keywords.

Application

Prerequisites

To download the application you can either download the archive or clone the repository:

git clone https://github.com/couchbaselabs/try-cb-nodejs.git

We recommend running the application with Docker, which starts up all components for you, but you can also run it in a Mix-and-Match style, which we'll decribe below.

Running the application with Docker

You will need Docker installed on your machine in order to run this application as we have defined a Dockerfile and a docker-compose.yml to run Couchbase Server 7.0.0, the front-end Vue app and the Node.js REST API.

To launch the full application, simply run this command from a terminal:

docker-compose up

NOTE: You may need more than the default RAM to run the images. We have tested the travel-sample apps with 4.5 GB RAM configured in Docker's Preferences... -> Resources -> Memory. When you run the application for the first time, it will pull/build the relevant docker images, so it may take a bit of time.

This will start the Node.js backend, Couchbase Server 7.0.0 and the Vue frontend app.

You can access the backend API on http://localhost:8080/, the UI on http://localhost:8081/ and Couchbase Server at http://localhost:8091/

❯ docker-compose up
Docker Compose is now in the Docker CLI, try `docker compose up`
Creating network "try-cb-nodejs_default" with the default driver
Pulling db (couchbase/server-sandbox:7.0.0)...
...
Building backend
...
Building frontend
...
Creating couchbase-sandbox-7.0.0 ... done
Creating try-cb-api ... done
Creating try-cb-fe ... done
Attaching to couchbase-sandbox-7.0.0, try-cb-api, try-cb-fe
couchbase-sandbox-7.0.0 | Starting Couchbase Server -- Web UI available at http://<ip>:8091
couchbase-sandbox-7.0.0 | and logs available in /opt/couchbase/var/lib/couchbase/logs
couchbase-sandbox-7.0.0 | Configuring Couchbase Server. Please wait (~60 sec)...
try-cb-api | wait-for-couchbase: checking http://db:8091/pools/default/buckets/travel-sample/
try-cb-api | wait-for-couchbase: polling for '.scopes | map(.name) | contains(["inventory", "
try-cb-fe | wait-for-it: waiting 400 seconds for backend:8080
try-cb-api | wait-for-couchbase: ...
couchbase-sandbox-7.0.0 | Configuration completed!
couchbase-sandbox-7.0.0 | Couchbase Admin UI: http://localhost:8091
couchbase-sandbox-7.0.0 | Login credentials: Administrator / password
try-cb-api | wait-for-couchbase: checking http://db:8094/api/cfg
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: Failure
try-cb-api | wait-for-couchbase: Creating hotels-index...
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index/count
try-cb-api | wait-for-couchbase: polling for '.count >= 917'
try-cb-api | wait-for-couchbase: ...
...
try-cb-api | wait-for-couchbase: checking http://db:9102/api/v1/stats
try-cb-api | wait-for-couchbase: polling for '.indexer.indexer_state == "Active"'
try-cb-api | wait-for-couchbase: polling for '. | keys | contains(["travel-sample:def_airport
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | del(.["travel-sample:def_na
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | map(.num_pending_requests =
try-cb-api | Connecting to backend Couchbase server db with Administrator/password
try-cb-api | Example app listening on port 8080!
try-cb-fe | wait-for-it: backend:8080 is available after 121 seconds
try-cb-fe |
try-cb-fe | > try-cb-frontend-v2@0.1.0 serve
try-cb-fe | > vue-cli-service serve --port 8081
try-cb-fe |
try-cb-fe | INFO Starting development server...

You should then be able to browse the UI, search for US airports and get flight route information.

To end the application press Control+C in the terminal and wait for docker-compose to gracefully stop your containers.

Mix and match services

Instead of running all services, you can start any combination of backend, frontend, db via docker, and take responsibility for starting the other services yourself.

As the provided docker-compose.yml sets up dependencies between the services, to make startup as smooth and automatic as possible, we also provide an alternative mix-and-match.yml. We'll look at a few useful scenarios here.

Bring your own database

If you wish to run this application against your own configuration of Couchbase Server, you will need version 7.0.0 or later with the travel-sample bucket setup.

NOTE: if you are not using Docker to start up the API server, or the provided wrapper wait-for-couchbase.sh, you will need to create a full text search index on travel-sample bucket called 'hotels-index'. You can do this via the following command:

curl --fail -s -u <username>:<password> -X PUT \
http://<host>:8094/api/index/hotels-index \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d @fts-hotels-index.json

With a running Couchbase Server, you can pass the database details in:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password docker-compose -f mix-and-match.yml up backend frontend

The Docker image will run the same checks as usual, and also create the hotels-index if it does not already exist.

Running the Node.js API application manually

You may want to run the Node.js application yourself, to make rapid changes to it, and try out the features of the Couchbase API, without having to re-build the Docker image. You may still use Docker to run the Database and Frontend components if desired.

Install the dependencies:

npm install

Note that nodemon is installed as a dev-dependency, so you can run the server with the benefit of automatic restarting as you make changes.

You will have to point your application at the Couchbase server with the CB_HOST environment variable.

The first time you run against a new database image, you may want to use the provided wait-for-couchbase.sh wrapper to ensure that all indexes are created. For example, using the Docker image provided:

docker-compose -f mix-and-match.yml up db
export CB_HOST=localhost
./wait-for-couchbase.sh echo "Couchbase is ready!"
npx nodemon index.js

If you already have an existing Couchbase server running and correctly configured, you might run:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password npx nodemon index.js

Finally, if you want to see how the sample frontend Vue application works with your changes, run it with:

docker-compose -f mix-and-match.yml up frontend

Running the front-end manually

To run the frontend components manually without Docker, follow the guide here

REST API reference, and tests.

All the travel-sample apps conform to the same interface, which means that they can all be used with the same database configuration and Vue.js frontend.

We've integrated Swagger/OpenApi version 3 documentation which can be accessed on the backend at http://localhost:8080/apidocs once you have started the app.

(You can also view a read-only version at https://docs.couchbase.com/python-sdk/current/hello-world/sample-application.html#)

To further ensure that every app conforms to the API, we have a test suite, which you can simply run with the command:

docker-compose --profile test up test

If you are running locally though, with a view to extending or modifying the travel-sample app, you will likely want to be able to make changes to both the code and the tests in parallel.

  • Start the backend server locally, for example using "Running the Node.js API application manually" above.
  • Check out the test suite repo in a separate working directory, and run the tests manually, as per the instructions.

About

No description, website, or topics provided.

Resources

Stars

51 stars

Watchers

143 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Couchbase Node.js travel-sample Application REST Backend

This is a sample application for getting started with Couchbase Server and the Node.js SDK. The application runs a single page web UI for demonstrating SQL for Documents (N1QL), Sub-document requests and Full Text Search (FTS) querying capabilities. It uses Couchbase Server together with the Express web framework for Node.js, Swagger for API documentation, Vue and Bootstrap.

The application is a flight planner that allows the user to search for and select a flight route (including the return flight) based on airports and dates. Airport selection is done dynamically using an autocomplete box bound to N1QL queries on the server side. After selecting a date, it then searches for applicable air flight routes from a previously populated database. An additional page allows users to search for Hotels using less structured keywords.

Application

Prerequisites

To download the application you can either download the archive or clone the repository:

git clone https://github.com/couchbaselabs/try-cb-nodejs.git

We recommend running the application with Docker, which starts up all components for you, but you can also run it in a Mix-and-Match style, which we'll decribe below.

Running the application with Docker

You will need Docker installed on your machine in order to run this application as we have defined a Dockerfile and a docker-compose.yml to run Couchbase Server 7.0.0, the front-end Vue app and the Node.js REST API.

To launch the full application, simply run this command from a terminal:

docker-compose up

NOTE: You may need more than the default RAM to run the images. We have tested the travel-sample apps with 4.5 GB RAM configured in Docker's Preferences... -> Resources -> Memory. When you run the application for the first time, it will pull/build the relevant docker images, so it may take a bit of time.

This will start the Node.js backend, Couchbase Server 7.0.0 and the Vue frontend app.

You can access the backend API on http://localhost:8080/, the UI on http://localhost:8081/ and Couchbase Server at http://localhost:8091/

❯ docker-compose up
Docker Compose is now in the Docker CLI, try `docker compose up`
Creating network "try-cb-nodejs_default" with the default driver
Pulling db (couchbase/server-sandbox:7.0.0)...
...
Building backend
...
Building frontend
...
Creating couchbase-sandbox-7.0.0 ... done
Creating try-cb-api ... done
Creating try-cb-fe ... done
Attaching to couchbase-sandbox-7.0.0, try-cb-api, try-cb-fe
couchbase-sandbox-7.0.0 | Starting Couchbase Server -- Web UI available at http://<ip>:8091
couchbase-sandbox-7.0.0 | and logs available in /opt/couchbase/var/lib/couchbase/logs
couchbase-sandbox-7.0.0 | Configuring Couchbase Server. Please wait (~60 sec)...
try-cb-api | wait-for-couchbase: checking http://db:8091/pools/default/buckets/travel-sample/
try-cb-api | wait-for-couchbase: polling for '.scopes | map(.name) | contains(["inventory", "
try-cb-fe | wait-for-it: waiting 400 seconds for backend:8080
try-cb-api | wait-for-couchbase: ...
couchbase-sandbox-7.0.0 | Configuration completed!
couchbase-sandbox-7.0.0 | Couchbase Admin UI: http://localhost:8091
couchbase-sandbox-7.0.0 | Login credentials: Administrator / password
try-cb-api | wait-for-couchbase: checking http://db:8094/api/cfg
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: Failure
try-cb-api | wait-for-couchbase: Creating hotels-index...
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index/count
try-cb-api | wait-for-couchbase: polling for '.count >= 917'
try-cb-api | wait-for-couchbase: ...
...
try-cb-api | wait-for-couchbase: checking http://db:9102/api/v1/stats
try-cb-api | wait-for-couchbase: polling for '.indexer.indexer_state == "Active"'
try-cb-api | wait-for-couchbase: polling for '. | keys | contains(["travel-sample:def_airport
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | del(.["travel-sample:def_na
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | map(.num_pending_requests =
try-cb-api | Connecting to backend Couchbase server db with Administrator/password
try-cb-api | Example app listening on port 8080!
try-cb-fe | wait-for-it: backend:8080 is available after 121 seconds
try-cb-fe |
try-cb-fe | > try-cb-frontend-v2@0.1.0 serve
try-cb-fe | > vue-cli-service serve --port 8081
try-cb-fe |
try-cb-fe | INFO Starting development server...

You should then be able to browse the UI, search for US airports and get flight route information.

To end the application press Control+C in the terminal and wait for docker-compose to gracefully stop your containers.

Mix and match services

Instead of running all services, you can start any combination of backend, frontend, db via docker, and take responsibility for starting the other services yourself.

As the provided docker-compose.yml sets up dependencies between the services, to make startup as smooth and automatic as possible, we also provide an alternative mix-and-match.yml. We'll look at a few useful scenarios here.

Bring your own database

If you wish to run this application against your own configuration of Couchbase Server, you will need version 7.0.0 or later with the travel-sample bucket setup.

NOTE: if you are not using Docker to start up the API server, or the provided wrapper wait-for-couchbase.sh, you will need to create a full text search index on travel-sample bucket called 'hotels-index'. You can do this via the following command:

curl --fail -s -u <username>:<password> -X PUT \
http://<host>:8094/api/index/hotels-index \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d @fts-hotels-index.json

With a running Couchbase Server, you can pass the database details in:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password docker-compose -f mix-and-match.yml up backend frontend

The Docker image will run the same checks as usual, and also create the hotels-index if it does not already exist.

Running the Node.js API application manually

You may want to run the Node.js application yourself, to make rapid changes to it, and try out the features of the Couchbase API, without having to re-build the Docker image. You may still use Docker to run the Database and Frontend components if desired.

Install the dependencies:

npm install

Note that nodemon is installed as a dev-dependency, so you can run the server with the benefit of automatic restarting as you make changes.

You will have to point your application at the Couchbase server with the CB_HOST environment variable.

The first time you run against a new database image, you may want to use the provided wait-for-couchbase.sh wrapper to ensure that all indexes are created. For example, using the Docker image provided:

docker-compose -f mix-and-match.yml up db
export CB_HOST=localhost
./wait-for-couchbase.sh echo "Couchbase is ready!"
npx nodemon index.js

If you already have an existing Couchbase server running and correctly configured, you might run:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password npx nodemon index.js

Finally, if you want to see how the sample frontend Vue application works with your changes, run it with:

docker-compose -f mix-and-match.yml up frontend

Running the front-end manually

To run the frontend components manually without Docker, follow the guide here

REST API reference, and tests.

All the travel-sample apps conform to the same interface, which means that they can all be used with the same database configuration and Vue.js frontend.

We've integrated Swagger/OpenApi version 3 documentation which can be accessed on the backend at http://localhost:8080/apidocs once you have started the app.

(You can also view a read-only version at https://docs.couchbase.com/python-sdk/current/hello-world/sample-application.html#)

To further ensure that every app conforms to the API, we have a test suite, which you can simply run with the command:

docker-compose --profile test up test

If you are running locally though, with a view to extending or modifying the travel-sample app, you will likely want to be able to make changes to both the code and the tests in parallel.

  • Start the backend server locally, for example using "Running the Node.js API application manually" above.
  • Check out the test suite repo in a separate working directory, and run the tests manually, as per the instructions.

About

No description, website, or topics provided.

Resources

Stars

51 stars

Watchers

143 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Couchbase Node.js travel-sample Application REST Backend

This is a sample application for getting started with Couchbase Server and the Node.js SDK. The application runs a single page web UI for demonstrating SQL for Documents (N1QL), Sub-document requests and Full Text Search (FTS) querying capabilities. It uses Couchbase Server together with the Express web framework for Node.js, Swagger for API documentation, Vue and Bootstrap.

The application is a flight planner that allows the user to search for and select a flight route (including the return flight) based on airports and dates. Airport selection is done dynamically using an autocomplete box bound to N1QL queries on the server side. After selecting a date, it then searches for applicable air flight routes from a previously populated database. An additional page allows users to search for Hotels using less structured keywords.

Application

Prerequisites

To download the application you can either download the archive or clone the repository:

git clone https://github.com/couchbaselabs/try-cb-nodejs.git

We recommend running the application with Docker, which starts up all components for you, but you can also run it in a Mix-and-Match style, which we'll decribe below.

Running the application with Docker

You will need Docker installed on your machine in order to run this application as we have defined a Dockerfile and a docker-compose.yml to run Couchbase Server 7.0.0, the front-end Vue app and the Node.js REST API.

To launch the full application, simply run this command from a terminal:

docker-compose up

NOTE: You may need more than the default RAM to run the images. We have tested the travel-sample apps with 4.5 GB RAM configured in Docker's Preferences... -> Resources -> Memory. When you run the application for the first time, it will pull/build the relevant docker images, so it may take a bit of time.

This will start the Node.js backend, Couchbase Server 7.0.0 and the Vue frontend app.

You can access the backend API on http://localhost:8080/, the UI on http://localhost:8081/ and Couchbase Server at http://localhost:8091/

❯ docker-compose up
Docker Compose is now in the Docker CLI, try `docker compose up`
Creating network "try-cb-nodejs_default" with the default driver
Pulling db (couchbase/server-sandbox:7.0.0)...
...
Building backend
...
Building frontend
...
Creating couchbase-sandbox-7.0.0 ... done
Creating try-cb-api ... done
Creating try-cb-fe ... done
Attaching to couchbase-sandbox-7.0.0, try-cb-api, try-cb-fe
couchbase-sandbox-7.0.0 | Starting Couchbase Server -- Web UI available at http://<ip>:8091
couchbase-sandbox-7.0.0 | and logs available in /opt/couchbase/var/lib/couchbase/logs
couchbase-sandbox-7.0.0 | Configuring Couchbase Server. Please wait (~60 sec)...
try-cb-api | wait-for-couchbase: checking http://db:8091/pools/default/buckets/travel-sample/
try-cb-api | wait-for-couchbase: polling for '.scopes | map(.name) | contains(["inventory", "
try-cb-fe | wait-for-it: waiting 400 seconds for backend:8080
try-cb-api | wait-for-couchbase: ...
couchbase-sandbox-7.0.0 | Configuration completed!
couchbase-sandbox-7.0.0 | Couchbase Admin UI: http://localhost:8091
couchbase-sandbox-7.0.0 | Login credentials: Administrator / password
try-cb-api | wait-for-couchbase: checking http://db:8094/api/cfg
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: Failure
try-cb-api | wait-for-couchbase: Creating hotels-index...
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index/count
try-cb-api | wait-for-couchbase: polling for '.count >= 917'
try-cb-api | wait-for-couchbase: ...
...
try-cb-api | wait-for-couchbase: checking http://db:9102/api/v1/stats
try-cb-api | wait-for-couchbase: polling for '.indexer.indexer_state == "Active"'
try-cb-api | wait-for-couchbase: polling for '. | keys | contains(["travel-sample:def_airport
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | del(.["travel-sample:def_na
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | map(.num_pending_requests =
try-cb-api | Connecting to backend Couchbase server db with Administrator/password
try-cb-api | Example app listening on port 8080!
try-cb-fe | wait-for-it: backend:8080 is available after 121 seconds
try-cb-fe |
try-cb-fe | > try-cb-frontend-v2@0.1.0 serve
try-cb-fe | > vue-cli-service serve --port 8081
try-cb-fe |
try-cb-fe | INFO Starting development server...

You should then be able to browse the UI, search for US airports and get flight route information.

To end the application press Control+C in the terminal and wait for docker-compose to gracefully stop your containers.

Mix and match services

Instead of running all services, you can start any combination of backend, frontend, db via docker, and take responsibility for starting the other services yourself.

As the provided docker-compose.yml sets up dependencies between the services, to make startup as smooth and automatic as possible, we also provide an alternative mix-and-match.yml. We'll look at a few useful scenarios here.

Bring your own database

If you wish to run this application against your own configuration of Couchbase Server, you will need version 7.0.0 or later with the travel-sample bucket setup.

NOTE: if you are not using Docker to start up the API server, or the provided wrapper wait-for-couchbase.sh, you will need to create a full text search index on travel-sample bucket called 'hotels-index'. You can do this via the following command:

curl --fail -s -u <username>:<password> -X PUT \
http://<host>:8094/api/index/hotels-index \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d @fts-hotels-index.json

With a running Couchbase Server, you can pass the database details in:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password docker-compose -f mix-and-match.yml up backend frontend

The Docker image will run the same checks as usual, and also create the hotels-index if it does not already exist.

Running the Node.js API application manually

You may want to run the Node.js application yourself, to make rapid changes to it, and try out the features of the Couchbase API, without having to re-build the Docker image. You may still use Docker to run the Database and Frontend components if desired.

Install the dependencies:

npm install

Note that nodemon is installed as a dev-dependency, so you can run the server with the benefit of automatic restarting as you make changes.

You will have to point your application at the Couchbase server with the CB_HOST environment variable.

The first time you run against a new database image, you may want to use the provided wait-for-couchbase.sh wrapper to ensure that all indexes are created. For example, using the Docker image provided:

docker-compose -f mix-and-match.yml up db
export CB_HOST=localhost
./wait-for-couchbase.sh echo "Couchbase is ready!"
npx nodemon index.js

If you already have an existing Couchbase server running and correctly configured, you might run:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password npx nodemon index.js

Finally, if you want to see how the sample frontend Vue application works with your changes, run it with:

docker-compose -f mix-and-match.yml up frontend

Running the front-end manually

To run the frontend components manually without Docker, follow the guide here

REST API reference, and tests.

All the travel-sample apps conform to the same interface, which means that they can all be used with the same database configuration and Vue.js frontend.

We've integrated Swagger/OpenApi version 3 documentation which can be accessed on the backend at http://localhost:8080/apidocs once you have started the app.

(You can also view a read-only version at https://docs.couchbase.com/python-sdk/current/hello-world/sample-application.html#)

To further ensure that every app conforms to the API, we have a test suite, which you can simply run with the command:

docker-compose --profile test up test

If you are running locally though, with a view to extending or modifying the travel-sample app, you will likely want to be able to make changes to both the code and the tests in parallel.

  • Start the backend server locally, for example using "Running the Node.js API application manually" above.
  • Check out the test suite repo in a separate working directory, and run the tests manually, as per the instructions.

About

No description, website, or topics provided.

Resources

Stars

51 stars

Watchers

143 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Couchbase Node.js travel-sample Application REST Backend

This is a sample application for getting started with Couchbase Server and the Node.js SDK. The application runs a single page web UI for demonstrating SQL for Documents (N1QL), Sub-document requests and Full Text Search (FTS) querying capabilities. It uses Couchbase Server together with the Express web framework for Node.js, Swagger for API documentation, Vue and Bootstrap.

The application is a flight planner that allows the user to search for and select a flight route (including the return flight) based on airports and dates. Airport selection is done dynamically using an autocomplete box bound to N1QL queries on the server side. After selecting a date, it then searches for applicable air flight routes from a previously populated database. An additional page allows users to search for Hotels using less structured keywords.

Application

Prerequisites

To download the application you can either download the archive or clone the repository:

git clone https://github.com/couchbaselabs/try-cb-nodejs.git

We recommend running the application with Docker, which starts up all components for you, but you can also run it in a Mix-and-Match style, which we'll decribe below.

Running the application with Docker

You will need Docker installed on your machine in order to run this application as we have defined a Dockerfile and a docker-compose.yml to run Couchbase Server 7.0.0, the front-end Vue app and the Node.js REST API.

To launch the full application, simply run this command from a terminal:

docker-compose up

NOTE: You may need more than the default RAM to run the images. We have tested the travel-sample apps with 4.5 GB RAM configured in Docker's Preferences... -> Resources -> Memory. When you run the application for the first time, it will pull/build the relevant docker images, so it may take a bit of time.

This will start the Node.js backend, Couchbase Server 7.0.0 and the Vue frontend app.

You can access the backend API on http://localhost:8080/, the UI on http://localhost:8081/ and Couchbase Server at http://localhost:8091/

❯ docker-compose up
Docker Compose is now in the Docker CLI, try `docker compose up`
Creating network "try-cb-nodejs_default" with the default driver
Pulling db (couchbase/server-sandbox:7.0.0)...
...
Building backend
...
Building frontend
...
Creating couchbase-sandbox-7.0.0 ... done
Creating try-cb-api ... done
Creating try-cb-fe ... done
Attaching to couchbase-sandbox-7.0.0, try-cb-api, try-cb-fe
couchbase-sandbox-7.0.0 | Starting Couchbase Server -- Web UI available at http://<ip>:8091
couchbase-sandbox-7.0.0 | and logs available in /opt/couchbase/var/lib/couchbase/logs
couchbase-sandbox-7.0.0 | Configuring Couchbase Server. Please wait (~60 sec)...
try-cb-api | wait-for-couchbase: checking http://db:8091/pools/default/buckets/travel-sample/
try-cb-api | wait-for-couchbase: polling for '.scopes | map(.name) | contains(["inventory", "
try-cb-fe | wait-for-it: waiting 400 seconds for backend:8080
try-cb-api | wait-for-couchbase: ...
couchbase-sandbox-7.0.0 | Configuration completed!
couchbase-sandbox-7.0.0 | Couchbase Admin UI: http://localhost:8091
couchbase-sandbox-7.0.0 | Login credentials: Administrator / password
try-cb-api | wait-for-couchbase: checking http://db:8094/api/cfg
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: Failure
try-cb-api | wait-for-couchbase: Creating hotels-index...
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index/count
try-cb-api | wait-for-couchbase: polling for '.count >= 917'
try-cb-api | wait-for-couchbase: ...
...
try-cb-api | wait-for-couchbase: checking http://db:9102/api/v1/stats
try-cb-api | wait-for-couchbase: polling for '.indexer.indexer_state == "Active"'
try-cb-api | wait-for-couchbase: polling for '. | keys | contains(["travel-sample:def_airport
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | del(.["travel-sample:def_na
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | map(.num_pending_requests =
try-cb-api | Connecting to backend Couchbase server db with Administrator/password
try-cb-api | Example app listening on port 8080!
try-cb-fe | wait-for-it: backend:8080 is available after 121 seconds
try-cb-fe |
try-cb-fe | > try-cb-frontend-v2@0.1.0 serve
try-cb-fe | > vue-cli-service serve --port 8081
try-cb-fe |
try-cb-fe | INFO Starting development server...

You should then be able to browse the UI, search for US airports and get flight route information.

To end the application press Control+C in the terminal and wait for docker-compose to gracefully stop your containers.

Mix and match services

Instead of running all services, you can start any combination of backend, frontend, db via docker, and take responsibility for starting the other services yourself.

As the provided docker-compose.yml sets up dependencies between the services, to make startup as smooth and automatic as possible, we also provide an alternative mix-and-match.yml. We'll look at a few useful scenarios here.

Bring your own database

If you wish to run this application against your own configuration of Couchbase Server, you will need version 7.0.0 or later with the travel-sample bucket setup.

NOTE: if you are not using Docker to start up the API server, or the provided wrapper wait-for-couchbase.sh, you will need to create a full text search index on travel-sample bucket called 'hotels-index'. You can do this via the following command:

curl --fail -s -u <username>:<password> -X PUT \
http://<host>:8094/api/index/hotels-index \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d @fts-hotels-index.json

With a running Couchbase Server, you can pass the database details in:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password docker-compose -f mix-and-match.yml up backend frontend

The Docker image will run the same checks as usual, and also create the hotels-index if it does not already exist.

Running the Node.js API application manually

You may want to run the Node.js application yourself, to make rapid changes to it, and try out the features of the Couchbase API, without having to re-build the Docker image. You may still use Docker to run the Database and Frontend components if desired.

Install the dependencies:

npm install

Note that nodemon is installed as a dev-dependency, so you can run the server with the benefit of automatic restarting as you make changes.

You will have to point your application at the Couchbase server with the CB_HOST environment variable.

The first time you run against a new database image, you may want to use the provided wait-for-couchbase.sh wrapper to ensure that all indexes are created. For example, using the Docker image provided:

docker-compose -f mix-and-match.yml up db
export CB_HOST=localhost
./wait-for-couchbase.sh echo "Couchbase is ready!"
npx nodemon index.js

If you already have an existing Couchbase server running and correctly configured, you might run:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password npx nodemon index.js

Finally, if you want to see how the sample frontend Vue application works with your changes, run it with:

docker-compose -f mix-and-match.yml up frontend

Running the front-end manually

To run the frontend components manually without Docker, follow the guide here

REST API reference, and tests.

All the travel-sample apps conform to the same interface, which means that they can all be used with the same database configuration and Vue.js frontend.

We've integrated Swagger/OpenApi version 3 documentation which can be accessed on the backend at http://localhost:8080/apidocs once you have started the app.

(You can also view a read-only version at https://docs.couchbase.com/python-sdk/current/hello-world/sample-application.html#)

To further ensure that every app conforms to the API, we have a test suite, which you can simply run with the command:

docker-compose --profile test up test

If you are running locally though, with a view to extending or modifying the travel-sample app, you will likely want to be able to make changes to both the code and the tests in parallel.

  • Start the backend server locally, for example using "Running the Node.js API application manually" above.
  • Check out the test suite repo in a separate working directory, and run the tests manually, as per the instructions.

About

No description, website, or topics provided.

Resources

Stars

51 stars

Watchers

143 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Couchbase Node.js travel-sample Application REST Backend

This is a sample application for getting started with Couchbase Server and the Node.js SDK. The application runs a single page web UI for demonstrating SQL for Documents (N1QL), Sub-document requests and Full Text Search (FTS) querying capabilities. It uses Couchbase Server together with the Express web framework for Node.js, Swagger for API documentation, Vue and Bootstrap.

The application is a flight planner that allows the user to search for and select a flight route (including the return flight) based on airports and dates. Airport selection is done dynamically using an autocomplete box bound to N1QL queries on the server side. After selecting a date, it then searches for applicable air flight routes from a previously populated database. An additional page allows users to search for Hotels using less structured keywords.

Application

Prerequisites

To download the application you can either download the archive or clone the repository:

git clone https://github.com/couchbaselabs/try-cb-nodejs.git

We recommend running the application with Docker, which starts up all components for you, but you can also run it in a Mix-and-Match style, which we'll decribe below.

Running the application with Docker

You will need Docker installed on your machine in order to run this application as we have defined a Dockerfile and a docker-compose.yml to run Couchbase Server 7.0.0, the front-end Vue app and the Node.js REST API.

To launch the full application, simply run this command from a terminal:

docker-compose up

NOTE: You may need more than the default RAM to run the images. We have tested the travel-sample apps with 4.5 GB RAM configured in Docker's Preferences... -> Resources -> Memory. When you run the application for the first time, it will pull/build the relevant docker images, so it may take a bit of time.

This will start the Node.js backend, Couchbase Server 7.0.0 and the Vue frontend app.

You can access the backend API on http://localhost:8080/, the UI on http://localhost:8081/ and Couchbase Server at http://localhost:8091/

❯ docker-compose up
Docker Compose is now in the Docker CLI, try `docker compose up`
Creating network "try-cb-nodejs_default" with the default driver
Pulling db (couchbase/server-sandbox:7.0.0)...
...
Building backend
...
Building frontend
...
Creating couchbase-sandbox-7.0.0 ... done
Creating try-cb-api ... done
Creating try-cb-fe ... done
Attaching to couchbase-sandbox-7.0.0, try-cb-api, try-cb-fe
couchbase-sandbox-7.0.0 | Starting Couchbase Server -- Web UI available at http://<ip>:8091
couchbase-sandbox-7.0.0 | and logs available in /opt/couchbase/var/lib/couchbase/logs
couchbase-sandbox-7.0.0 | Configuring Couchbase Server. Please wait (~60 sec)...
try-cb-api | wait-for-couchbase: checking http://db:8091/pools/default/buckets/travel-sample/
try-cb-api | wait-for-couchbase: polling for '.scopes | map(.name) | contains(["inventory", "
try-cb-fe | wait-for-it: waiting 400 seconds for backend:8080
try-cb-api | wait-for-couchbase: ...
couchbase-sandbox-7.0.0 | Configuration completed!
couchbase-sandbox-7.0.0 | Couchbase Admin UI: http://localhost:8091
couchbase-sandbox-7.0.0 | Login credentials: Administrator / password
try-cb-api | wait-for-couchbase: checking http://db:8094/api/cfg
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: Failure
try-cb-api | wait-for-couchbase: Creating hotels-index...
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index/count
try-cb-api | wait-for-couchbase: polling for '.count >= 917'
try-cb-api | wait-for-couchbase: ...
...
try-cb-api | wait-for-couchbase: checking http://db:9102/api/v1/stats
try-cb-api | wait-for-couchbase: polling for '.indexer.indexer_state == "Active"'
try-cb-api | wait-for-couchbase: polling for '. | keys | contains(["travel-sample:def_airport
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | del(.["travel-sample:def_na
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | map(.num_pending_requests =
try-cb-api | Connecting to backend Couchbase server db with Administrator/password
try-cb-api | Example app listening on port 8080!
try-cb-fe | wait-for-it: backend:8080 is available after 121 seconds
try-cb-fe |
try-cb-fe | > try-cb-frontend-v2@0.1.0 serve
try-cb-fe | > vue-cli-service serve --port 8081
try-cb-fe |
try-cb-fe | INFO Starting development server...

You should then be able to browse the UI, search for US airports and get flight route information.

To end the application press Control+C in the terminal and wait for docker-compose to gracefully stop your containers.

Mix and match services

Instead of running all services, you can start any combination of backend, frontend, db via docker, and take responsibility for starting the other services yourself.

As the provided docker-compose.yml sets up dependencies between the services, to make startup as smooth and automatic as possible, we also provide an alternative mix-and-match.yml. We'll look at a few useful scenarios here.

Bring your own database

If you wish to run this application against your own configuration of Couchbase Server, you will need version 7.0.0 or later with the travel-sample bucket setup.

NOTE: if you are not using Docker to start up the API server, or the provided wrapper wait-for-couchbase.sh, you will need to create a full text search index on travel-sample bucket called 'hotels-index'. You can do this via the following command:

curl --fail -s -u <username>:<password> -X PUT \
http://<host>:8094/api/index/hotels-index \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d @fts-hotels-index.json

With a running Couchbase Server, you can pass the database details in:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password docker-compose -f mix-and-match.yml up backend frontend

The Docker image will run the same checks as usual, and also create the hotels-index if it does not already exist.

Running the Node.js API application manually

You may want to run the Node.js application yourself, to make rapid changes to it, and try out the features of the Couchbase API, without having to re-build the Docker image. You may still use Docker to run the Database and Frontend components if desired.

Install the dependencies:

npm install

Note that nodemon is installed as a dev-dependency, so you can run the server with the benefit of automatic restarting as you make changes.

You will have to point your application at the Couchbase server with the CB_HOST environment variable.

The first time you run against a new database image, you may want to use the provided wait-for-couchbase.sh wrapper to ensure that all indexes are created. For example, using the Docker image provided:

docker-compose -f mix-and-match.yml up db
export CB_HOST=localhost
./wait-for-couchbase.sh echo "Couchbase is ready!"
npx nodemon index.js

If you already have an existing Couchbase server running and correctly configured, you might run:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password npx nodemon index.js

Finally, if you want to see how the sample frontend Vue application works with your changes, run it with:

docker-compose -f mix-and-match.yml up frontend

Running the front-end manually

To run the frontend components manually without Docker, follow the guide here

REST API reference, and tests.

All the travel-sample apps conform to the same interface, which means that they can all be used with the same database configuration and Vue.js frontend.

We've integrated Swagger/OpenApi version 3 documentation which can be accessed on the backend at http://localhost:8080/apidocs once you have started the app.

(You can also view a read-only version at https://docs.couchbase.com/python-sdk/current/hello-world/sample-application.html#)

To further ensure that every app conforms to the API, we have a test suite, which you can simply run with the command:

docker-compose --profile test up test

If you are running locally though, with a view to extending or modifying the travel-sample app, you will likely want to be able to make changes to both the code and the tests in parallel.

  • Start the backend server locally, for example using "Running the Node.js API application manually" above.
  • Check out the test suite repo in a separate working directory, and run the tests manually, as per the instructions.

About

No description, website, or topics provided.

Resources

Stars

51 stars

Watchers

143 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Couchbase Node.js travel-sample Application REST Backend

This is a sample application for getting started with Couchbase Server and the Node.js SDK. The application runs a single page web UI for demonstrating SQL for Documents (N1QL), Sub-document requests and Full Text Search (FTS) querying capabilities. It uses Couchbase Server together with the Express web framework for Node.js, Swagger for API documentation, Vue and Bootstrap.

The application is a flight planner that allows the user to search for and select a flight route (including the return flight) based on airports and dates. Airport selection is done dynamically using an autocomplete box bound to N1QL queries on the server side. After selecting a date, it then searches for applicable air flight routes from a previously populated database. An additional page allows users to search for Hotels using less structured keywords.

Application

Prerequisites

To download the application you can either download the archive or clone the repository:

git clone https://github.com/couchbaselabs/try-cb-nodejs.git

We recommend running the application with Docker, which starts up all components for you, but you can also run it in a Mix-and-Match style, which we'll decribe below.

Running the application with Docker

You will need Docker installed on your machine in order to run this application as we have defined a Dockerfile and a docker-compose.yml to run Couchbase Server 7.0.0, the front-end Vue app and the Node.js REST API.

To launch the full application, simply run this command from a terminal:

docker-compose up

NOTE: You may need more than the default RAM to run the images. We have tested the travel-sample apps with 4.5 GB RAM configured in Docker's Preferences... -> Resources -> Memory. When you run the application for the first time, it will pull/build the relevant docker images, so it may take a bit of time.

This will start the Node.js backend, Couchbase Server 7.0.0 and the Vue frontend app.

You can access the backend API on http://localhost:8080/, the UI on http://localhost:8081/ and Couchbase Server at http://localhost:8091/

❯ docker-compose up
Docker Compose is now in the Docker CLI, try `docker compose up`
Creating network "try-cb-nodejs_default" with the default driver
Pulling db (couchbase/server-sandbox:7.0.0)...
...
Building backend
...
Building frontend
...
Creating couchbase-sandbox-7.0.0 ... done
Creating try-cb-api ... done
Creating try-cb-fe ... done
Attaching to couchbase-sandbox-7.0.0, try-cb-api, try-cb-fe
couchbase-sandbox-7.0.0 | Starting Couchbase Server -- Web UI available at http://<ip>:8091
couchbase-sandbox-7.0.0 | and logs available in /opt/couchbase/var/lib/couchbase/logs
couchbase-sandbox-7.0.0 | Configuring Couchbase Server. Please wait (~60 sec)...
try-cb-api | wait-for-couchbase: checking http://db:8091/pools/default/buckets/travel-sample/
try-cb-api | wait-for-couchbase: polling for '.scopes | map(.name) | contains(["inventory", "
try-cb-fe | wait-for-it: waiting 400 seconds for backend:8080
try-cb-api | wait-for-couchbase: ...
couchbase-sandbox-7.0.0 | Configuration completed!
couchbase-sandbox-7.0.0 | Couchbase Admin UI: http://localhost:8091
couchbase-sandbox-7.0.0 | Login credentials: Administrator / password
try-cb-api | wait-for-couchbase: checking http://db:8094/api/cfg
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: Failure
try-cb-api | wait-for-couchbase: Creating hotels-index...
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index/count
try-cb-api | wait-for-couchbase: polling for '.count >= 917'
try-cb-api | wait-for-couchbase: ...
...
try-cb-api | wait-for-couchbase: checking http://db:9102/api/v1/stats
try-cb-api | wait-for-couchbase: polling for '.indexer.indexer_state == "Active"'
try-cb-api | wait-for-couchbase: polling for '. | keys | contains(["travel-sample:def_airport
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | del(.["travel-sample:def_na
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | map(.num_pending_requests =
try-cb-api | Connecting to backend Couchbase server db with Administrator/password
try-cb-api | Example app listening on port 8080!
try-cb-fe | wait-for-it: backend:8080 is available after 121 seconds
try-cb-fe |
try-cb-fe | > try-cb-frontend-v2@0.1.0 serve
try-cb-fe | > vue-cli-service serve --port 8081
try-cb-fe |
try-cb-fe | INFO Starting development server...

You should then be able to browse the UI, search for US airports and get flight route information.

To end the application press Control+C in the terminal and wait for docker-compose to gracefully stop your containers.

Mix and match services

Instead of running all services, you can start any combination of backend, frontend, db via docker, and take responsibility for starting the other services yourself.

As the provided docker-compose.yml sets up dependencies between the services, to make startup as smooth and automatic as possible, we also provide an alternative mix-and-match.yml. We'll look at a few useful scenarios here.

Bring your own database

If you wish to run this application against your own configuration of Couchbase Server, you will need version 7.0.0 or later with the travel-sample bucket setup.

NOTE: if you are not using Docker to start up the API server, or the provided wrapper wait-for-couchbase.sh, you will need to create a full text search index on travel-sample bucket called 'hotels-index'. You can do this via the following command:

curl --fail -s -u <username>:<password> -X PUT \
http://<host>:8094/api/index/hotels-index \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d @fts-hotels-index.json

With a running Couchbase Server, you can pass the database details in:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password docker-compose -f mix-and-match.yml up backend frontend

The Docker image will run the same checks as usual, and also create the hotels-index if it does not already exist.

Running the Node.js API application manually

You may want to run the Node.js application yourself, to make rapid changes to it, and try out the features of the Couchbase API, without having to re-build the Docker image. You may still use Docker to run the Database and Frontend components if desired.

Install the dependencies:

npm install

Note that nodemon is installed as a dev-dependency, so you can run the server with the benefit of automatic restarting as you make changes.

You will have to point your application at the Couchbase server with the CB_HOST environment variable.

The first time you run against a new database image, you may want to use the provided wait-for-couchbase.sh wrapper to ensure that all indexes are created. For example, using the Docker image provided:

docker-compose -f mix-and-match.yml up db
export CB_HOST=localhost
./wait-for-couchbase.sh echo "Couchbase is ready!"
npx nodemon index.js

If you already have an existing Couchbase server running and correctly configured, you might run:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password npx nodemon index.js

Finally, if you want to see how the sample frontend Vue application works with your changes, run it with:

docker-compose -f mix-and-match.yml up frontend

Running the front-end manually

To run the frontend components manually without Docker, follow the guide here

REST API reference, and tests.

All the travel-sample apps conform to the same interface, which means that they can all be used with the same database configuration and Vue.js frontend.

We've integrated Swagger/OpenApi version 3 documentation which can be accessed on the backend at http://localhost:8080/apidocs once you have started the app.

(You can also view a read-only version at https://docs.couchbase.com/python-sdk/current/hello-world/sample-application.html#)

To further ensure that every app conforms to the API, we have a test suite, which you can simply run with the command:

docker-compose --profile test up test

If you are running locally though, with a view to extending or modifying the travel-sample app, you will likely want to be able to make changes to both the code and the tests in parallel.

  • Start the backend server locally, for example using "Running the Node.js API application manually" above.
  • Check out the test suite repo in a separate working directory, and run the tests manually, as per the instructions.

About

No description, website, or topics provided.

Resources

Stars

51 stars

Watchers

143 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Couchbase Node.js travel-sample Application REST Backend

This is a sample application for getting started with Couchbase Server and the Node.js SDK. The application runs a single page web UI for demonstrating SQL for Documents (N1QL), Sub-document requests and Full Text Search (FTS) querying capabilities. It uses Couchbase Server together with the Express web framework for Node.js, Swagger for API documentation, Vue and Bootstrap.

The application is a flight planner that allows the user to search for and select a flight route (including the return flight) based on airports and dates. Airport selection is done dynamically using an autocomplete box bound to N1QL queries on the server side. After selecting a date, it then searches for applicable air flight routes from a previously populated database. An additional page allows users to search for Hotels using less structured keywords.

Application

Prerequisites

To download the application you can either download the archive or clone the repository:

git clone https://github.com/couchbaselabs/try-cb-nodejs.git

We recommend running the application with Docker, which starts up all components for you, but you can also run it in a Mix-and-Match style, which we'll decribe below.

Running the application with Docker

You will need Docker installed on your machine in order to run this application as we have defined a Dockerfile and a docker-compose.yml to run Couchbase Server 7.0.0, the front-end Vue app and the Node.js REST API.

To launch the full application, simply run this command from a terminal:

docker-compose up

NOTE: You may need more than the default RAM to run the images. We have tested the travel-sample apps with 4.5 GB RAM configured in Docker's Preferences... -> Resources -> Memory. When you run the application for the first time, it will pull/build the relevant docker images, so it may take a bit of time.

This will start the Node.js backend, Couchbase Server 7.0.0 and the Vue frontend app.

You can access the backend API on http://localhost:8080/, the UI on http://localhost:8081/ and Couchbase Server at http://localhost:8091/

❯ docker-compose up
Docker Compose is now in the Docker CLI, try `docker compose up`
Creating network "try-cb-nodejs_default" with the default driver
Pulling db (couchbase/server-sandbox:7.0.0)...
...
Building backend
...
Building frontend
...
Creating couchbase-sandbox-7.0.0 ... done
Creating try-cb-api ... done
Creating try-cb-fe ... done
Attaching to couchbase-sandbox-7.0.0, try-cb-api, try-cb-fe
couchbase-sandbox-7.0.0 | Starting Couchbase Server -- Web UI available at http://<ip>:8091
couchbase-sandbox-7.0.0 | and logs available in /opt/couchbase/var/lib/couchbase/logs
couchbase-sandbox-7.0.0 | Configuring Couchbase Server. Please wait (~60 sec)...
try-cb-api | wait-for-couchbase: checking http://db:8091/pools/default/buckets/travel-sample/
try-cb-api | wait-for-couchbase: polling for '.scopes | map(.name) | contains(["inventory", "
try-cb-fe | wait-for-it: waiting 400 seconds for backend:8080
try-cb-api | wait-for-couchbase: ...
couchbase-sandbox-7.0.0 | Configuration completed!
couchbase-sandbox-7.0.0 | Couchbase Admin UI: http://localhost:8091
couchbase-sandbox-7.0.0 | Login credentials: Administrator / password
try-cb-api | wait-for-couchbase: checking http://db:8094/api/cfg
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: Failure
try-cb-api | wait-for-couchbase: Creating hotels-index...
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index/count
try-cb-api | wait-for-couchbase: polling for '.count >= 917'
try-cb-api | wait-for-couchbase: ...
...
try-cb-api | wait-for-couchbase: checking http://db:9102/api/v1/stats
try-cb-api | wait-for-couchbase: polling for '.indexer.indexer_state == "Active"'
try-cb-api | wait-for-couchbase: polling for '. | keys | contains(["travel-sample:def_airport
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | del(.["travel-sample:def_na
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | map(.num_pending_requests =
try-cb-api | Connecting to backend Couchbase server db with Administrator/password
try-cb-api | Example app listening on port 8080!
try-cb-fe | wait-for-it: backend:8080 is available after 121 seconds
try-cb-fe |
try-cb-fe | > try-cb-frontend-v2@0.1.0 serve
try-cb-fe | > vue-cli-service serve --port 8081
try-cb-fe |
try-cb-fe | INFO Starting development server...

You should then be able to browse the UI, search for US airports and get flight route information.

To end the application press Control+C in the terminal and wait for docker-compose to gracefully stop your containers.

Mix and match services

Instead of running all services, you can start any combination of backend, frontend, db via docker, and take responsibility for starting the other services yourself.

As the provided docker-compose.yml sets up dependencies between the services, to make startup as smooth and automatic as possible, we also provide an alternative mix-and-match.yml. We'll look at a few useful scenarios here.

Bring your own database

If you wish to run this application against your own configuration of Couchbase Server, you will need version 7.0.0 or later with the travel-sample bucket setup.

NOTE: if you are not using Docker to start up the API server, or the provided wrapper wait-for-couchbase.sh, you will need to create a full text search index on travel-sample bucket called 'hotels-index'. You can do this via the following command:

curl --fail -s -u <username>:<password> -X PUT \
http://<host>:8094/api/index/hotels-index \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d @fts-hotels-index.json

With a running Couchbase Server, you can pass the database details in:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password docker-compose -f mix-and-match.yml up backend frontend

The Docker image will run the same checks as usual, and also create the hotels-index if it does not already exist.

Running the Node.js API application manually

You may want to run the Node.js application yourself, to make rapid changes to it, and try out the features of the Couchbase API, without having to re-build the Docker image. You may still use Docker to run the Database and Frontend components if desired.

Install the dependencies:

npm install

Note that nodemon is installed as a dev-dependency, so you can run the server with the benefit of automatic restarting as you make changes.

You will have to point your application at the Couchbase server with the CB_HOST environment variable.

The first time you run against a new database image, you may want to use the provided wait-for-couchbase.sh wrapper to ensure that all indexes are created. For example, using the Docker image provided:

docker-compose -f mix-and-match.yml up db
export CB_HOST=localhost
./wait-for-couchbase.sh echo "Couchbase is ready!"
npx nodemon index.js

If you already have an existing Couchbase server running and correctly configured, you might run:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password npx nodemon index.js

Finally, if you want to see how the sample frontend Vue application works with your changes, run it with:

docker-compose -f mix-and-match.yml up frontend

Running the front-end manually

To run the frontend components manually without Docker, follow the guide here

REST API reference, and tests.

All the travel-sample apps conform to the same interface, which means that they can all be used with the same database configuration and Vue.js frontend.

We've integrated Swagger/OpenApi version 3 documentation which can be accessed on the backend at http://localhost:8080/apidocs once you have started the app.

(You can also view a read-only version at https://docs.couchbase.com/python-sdk/current/hello-world/sample-application.html#)

To further ensure that every app conforms to the API, we have a test suite, which you can simply run with the command:

docker-compose --profile test up test

If you are running locally though, with a view to extending or modifying the travel-sample app, you will likely want to be able to make changes to both the code and the tests in parallel.

  • Start the backend server locally, for example using "Running the Node.js API application manually" above.
  • Check out the test suite repo in a separate working directory, and run the tests manually, as per the instructions.

About

No description, website, or topics provided.

Resources

Stars

51 stars

Watchers

143 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Couchbase Node.js travel-sample Application REST Backend

This is a sample application for getting started with Couchbase Server and the Node.js SDK. The application runs a single page web UI for demonstrating SQL for Documents (N1QL), Sub-document requests and Full Text Search (FTS) querying capabilities. It uses Couchbase Server together with the Express web framework for Node.js, Swagger for API documentation, Vue and Bootstrap.

The application is a flight planner that allows the user to search for and select a flight route (including the return flight) based on airports and dates. Airport selection is done dynamically using an autocomplete box bound to N1QL queries on the server side. After selecting a date, it then searches for applicable air flight routes from a previously populated database. An additional page allows users to search for Hotels using less structured keywords.

Application

Prerequisites

To download the application you can either download the archive or clone the repository:

git clone https://github.com/couchbaselabs/try-cb-nodejs.git

We recommend running the application with Docker, which starts up all components for you, but you can also run it in a Mix-and-Match style, which we'll decribe below.

Running the application with Docker

You will need Docker installed on your machine in order to run this application as we have defined a Dockerfile and a docker-compose.yml to run Couchbase Server 7.0.0, the front-end Vue app and the Node.js REST API.

To launch the full application, simply run this command from a terminal:

docker-compose up

NOTE: You may need more than the default RAM to run the images. We have tested the travel-sample apps with 4.5 GB RAM configured in Docker's Preferences... -> Resources -> Memory. When you run the application for the first time, it will pull/build the relevant docker images, so it may take a bit of time.

This will start the Node.js backend, Couchbase Server 7.0.0 and the Vue frontend app.

You can access the backend API on http://localhost:8080/, the UI on http://localhost:8081/ and Couchbase Server at http://localhost:8091/

❯ docker-compose up
Docker Compose is now in the Docker CLI, try `docker compose up`
Creating network "try-cb-nodejs_default" with the default driver
Pulling db (couchbase/server-sandbox:7.0.0)...
...
Building backend
...
Building frontend
...
Creating couchbase-sandbox-7.0.0 ... done
Creating try-cb-api ... done
Creating try-cb-fe ... done
Attaching to couchbase-sandbox-7.0.0, try-cb-api, try-cb-fe
couchbase-sandbox-7.0.0 | Starting Couchbase Server -- Web UI available at http://<ip>:8091
couchbase-sandbox-7.0.0 | and logs available in /opt/couchbase/var/lib/couchbase/logs
couchbase-sandbox-7.0.0 | Configuring Couchbase Server. Please wait (~60 sec)...
try-cb-api | wait-for-couchbase: checking http://db:8091/pools/default/buckets/travel-sample/
try-cb-api | wait-for-couchbase: polling for '.scopes | map(.name) | contains(["inventory", "
try-cb-fe | wait-for-it: waiting 400 seconds for backend:8080
try-cb-api | wait-for-couchbase: ...
couchbase-sandbox-7.0.0 | Configuration completed!
couchbase-sandbox-7.0.0 | Couchbase Admin UI: http://localhost:8091
couchbase-sandbox-7.0.0 | Login credentials: Administrator / password
try-cb-api | wait-for-couchbase: checking http://db:8094/api/cfg
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index
try-cb-api | wait-for-couchbase: polling for '.status == "ok"'
try-cb-api | wait-for-couchbase: Failure
try-cb-api | wait-for-couchbase: Creating hotels-index...
try-cb-api | wait-for-couchbase: checking http://db:8094/api/index/hotels-index/count
try-cb-api | wait-for-couchbase: polling for '.count >= 917'
try-cb-api | wait-for-couchbase: ...
...
try-cb-api | wait-for-couchbase: checking http://db:9102/api/v1/stats
try-cb-api | wait-for-couchbase: polling for '.indexer.indexer_state == "Active"'
try-cb-api | wait-for-couchbase: polling for '. | keys | contains(["travel-sample:def_airport
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | del(.["travel-sample:def_na
try-cb-api | wait-for-couchbase: polling for '. | del(.indexer) | map(.num_pending_requests =
try-cb-api | Connecting to backend Couchbase server db with Administrator/password
try-cb-api | Example app listening on port 8080!
try-cb-fe | wait-for-it: backend:8080 is available after 121 seconds
try-cb-fe |
try-cb-fe | > try-cb-frontend-v2@0.1.0 serve
try-cb-fe | > vue-cli-service serve --port 8081
try-cb-fe |
try-cb-fe | INFO Starting development server...

You should then be able to browse the UI, search for US airports and get flight route information.

To end the application press Control+C in the terminal and wait for docker-compose to gracefully stop your containers.

Mix and match services

Instead of running all services, you can start any combination of backend, frontend, db via docker, and take responsibility for starting the other services yourself.

As the provided docker-compose.yml sets up dependencies between the services, to make startup as smooth and automatic as possible, we also provide an alternative mix-and-match.yml. We'll look at a few useful scenarios here.

Bring your own database

If you wish to run this application against your own configuration of Couchbase Server, you will need version 7.0.0 or later with the travel-sample bucket setup.

NOTE: if you are not using Docker to start up the API server, or the provided wrapper wait-for-couchbase.sh, you will need to create a full text search index on travel-sample bucket called 'hotels-index'. You can do this via the following command:

curl --fail -s -u <username>:<password> -X PUT \
http://<host>:8094/api/index/hotels-index \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d @fts-hotels-index.json

With a running Couchbase Server, you can pass the database details in:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password docker-compose -f mix-and-match.yml up backend frontend

The Docker image will run the same checks as usual, and also create the hotels-index if it does not already exist.

Running the Node.js API application manually

You may want to run the Node.js application yourself, to make rapid changes to it, and try out the features of the Couchbase API, without having to re-build the Docker image. You may still use Docker to run the Database and Frontend components if desired.

Install the dependencies:

npm install

Note that nodemon is installed as a dev-dependency, so you can run the server with the benefit of automatic restarting as you make changes.

You will have to point your application at the Couchbase server with the CB_HOST environment variable.

The first time you run against a new database image, you may want to use the provided wait-for-couchbase.sh wrapper to ensure that all indexes are created. For example, using the Docker image provided:

docker-compose -f mix-and-match.yml up db
export CB_HOST=localhost
./wait-for-couchbase.sh echo "Couchbase is ready!"
npx nodemon index.js

If you already have an existing Couchbase server running and correctly configured, you might run:

CB_HOST=10.144.211.101 CB_USER=Administrator CB_PSWD=password npx nodemon index.js

Finally, if you want to see how the sample frontend Vue application works with your changes, run it with:

docker-compose -f mix-and-match.yml up frontend

Running the front-end manually

To run the frontend components manually without Docker, follow the guide here

REST API reference, and tests.

All the travel-sample apps conform to the same interface, which means that they can all be used with the same database configuration and Vue.js frontend.

We've integrated Swagger/OpenApi version 3 documentation which can be accessed on the backend at http://localhost:8080/apidocs once you have started the app.

(You can also view a read-only version at https://docs.couchbase.com/python-sdk/current/hello-world/sample-application.html#)

To further ensure that every app conforms to the API, we have a test suite, which you can simply run with the command:

docker-compose --profile test up test

If you are running locally though, with a view to extending or modifying the travel-sample app, you will likely want to be able to make changes to both the code and the tests in parallel.

  • Start the backend server locally, for example using "Running the Node.js API application manually" above.
  • Check out the test suite repo in a separate working directory, and run the tests manually, as per the instructions.

About

No description, website, or topics provided.

Resources

Stars

51 stars

Watchers

143 watching

Forks

Releases

Packages

Used by

Contributors

Languages