A newer version of this documentation is available.

View Latest

Creating a JavaScript Library

  • how-to
    +

    Introduction

    In this guide you will learn how to create a library for storing JavaScript functions, and how to add a new function to the library.

    If you want to try out the examples in this section, follow the instructions given in Do a Quick Install to install Couchbase Server, configure a cluster, and load a sample dataset. Read the following for further information about the tools available for editing and executing queries:

    Creating the Library and Adding Your First Function

    You can use the Query Workbench UI or the REST API to create a library. The process for creating the library is as follows:

    Sequence for Creating a JavaScript Library
    Figure 1. Sequence for Creating a JavaScript Library
    (1) Create library

    Create the library by creating the logical storage for the library.

    (2) Add the JavaScript function to the library

    Edit the library to add your JavaScript function.

    (3) Create N1QL User-Defined Function

    The N1QL User Defined Function is needed so that it can be called as part of N1QL statements (such as SELECT and EXECUTE FUNCTION). Creating the N1QL User-Defined Function is covered in Creating a User-Defined Function.

    As shown in Figure 1, the library is created and the first function is added in the same step.

    • Query Workbench

    • REST API

    1. Select Query to access the Query Workbench, then select UDF Query Workbench menu.

      route to the user-defined functions screen
    2. Click on the + add function library link in the Javascript Function Libraries table to show the Add Library screen.

    3. Select your Namespace from the drop-down lists. In this example, the namespace has been set to the inventory scope inside the travel-sample bucket. You also have the option of leaving the Namespace unset, which will the library accessible at the cluster level.

      add scoped library
      A Note on Namespaces

      The Namespace defines the scope of the library within the containing bucket. (You can read about scopes here). Setting the namespace means that functions in the library can only be called users who have their context set to the same scope.

    4. Enter a name for the library in the Library Name field.

    5. Add your own function to the library, for example:

      function getBusinessDays(startDate, endDate) {
          let count = 0;
          const curDate = new Date(new Date(startDate).getTime());
          while (curDate <= new Date(endDate)) {
              const dayOfWeek = curDate.getDay();
              if(dayOfWeek !== 0 && dayOfWeek !== 6)
                  count++;
              curDate.setDate(curDate.getDate() + 1);
          }
          return count;
      }
    6. Save the library by pressing the Save button.

      You can, of course, create an empty library and add functions to it later.
    1. Start a shell session.

    2. Run a curl command to create a JavaScript library within a desired scope.

      curl -v -X POST  'http://localhost:8093/evaluator/v1/libraries/my-library?bucket=travel-sample&scope=inventory' \
       -u Administrator:password \
       -d 'function getBusinessDays(startDate, endDate) {
                let count = 0;
                const curDate = new Date(new Date(startDate).getTime());
                while (curDate <= new Date(endDate)) {
                    const dayOfWeek = curDate.getDay();
                    if(dayOfWeek !== 0 && dayOfWeek !== 6)
                        count++;
                    curDate.setDate(curDate.getDate() + 1);
                }
                return count;
            }' 

      The parameters in the URL denote that the function should reside in the travel-sample bucket, under the inventory scope within that bucket.

    You have now created your JavaScript library. In the next step, you’ll create a N1QL User-Defined function that references your library function, so it can be called as part of any N1QL statement.