blob: d214870f7e7cd98761b1fed059a87330d2cf1422 [file] [log] [blame]
.. Licensed under the Apache License, Version 2.0 (the "License"); you may not
.. use this file except in compliance with the License. You may obtain a copy of
.. the License at
..
.. http://www.apache.org/licenses/LICENSE-2.0
..
.. Unless required by applicable law or agreed to in writing, software
.. distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
.. WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
.. License for the specific language governing permissions and limitations under
.. the License.
.. _best-practices/jsdevel:
===========================
JavaScript development tips
===========================
Working with Apache CouchDB's JavaScript environment is a lot different than
working with traditional JavaScript development environments. Here are some
tips and tricks that will ease the difficulty.
.. rst-class:: open
- Check the JavaScript version being used by your CouchDB. As of version 3.2.0,
this is reported in the output of ``GET /_node/_local/_versions``. Prior to
version 3.2.0, you will need to see which JavaScript library is installed by
your CouchDB binary distribution, provided by your operating system, or
linked by your compilation process.
If the version is 1.8.5, this is an **old** version of JavaScript, only
supporting the ECMA-262 5th edition ("ES5") of the language. ES6/2015 and
newer constructs **cannot** be used.
Fortunately, there are many tools available for transpiling modern JavaScript
into code compatible with older JS engines. The `Babel Project website
<http://babeljs.io/repl>`_, for example, offers an in-browser text editor
which transpiles JavaScript in real-time. Configuring CouchDB-compatibility
is as easy as enabling the ``ENV PRESET`` option, and typing "firefox 4.0"
into the *TARGETS* field.
- The ``log()`` function will log output to the CouchDB log file or stream.
You can log strings, objects, and arrays directly, without first converting
to JSON. Use this in conjunction with a local CouchDB instance for best
results.
- Be sure to guard all document accesses to avoid exceptions when fields
or subfields are missing: ``if (doc && doc.myarray && doc.myarray.length)...``