In April, the Node.js development team released Node.js 14. This major version release, code-named Fermium, will become a long-term support (LTS) release in October 2020.
Node.js 14 incorporates improvements and new features from the V8 8.1 JavaScript engine. I'll introduce two of them: Optional chaining and the nullish coalescing operator. I will also show you how to deploy Node.js 14 on Red Hat OpenShift. See the end of the article for a list of resources for learning more about improvements and new features in Node.js 14.
Note: The Red Hat Software Collections team creates and maintains Source-to-Image (S2I) container images for Node.js. They have released an S2I image for Node.js 14.
Optional chaining in Node.js 14
JavaScript's optional chaining operator (?.
) lets you read the value of a property located deep within a chain of connected objects. With this feature, you do not need to validate each reference in the chain explicitly. Here's an example of optional chaining in Node.js 14:
const adventurer = { name: 'Alice', cat: { name: 'Dinah' } }; console.log(adventurer.dog?.name); // undefined (no error)
In previous Node.js versions, we might have used the logical AND (&&
) operator to work around this issue, like this:
console.log(adventurer.dog && adventurer.dog.name);
If the operand on the left side of the &&
operator is invalid, then the operand on the right will not be evaluated. Eventually, JavaScript will return an undefined instead of an error.
The nullish coalescing operator
Nullish coalescing (??
) is a logical operator that returns the operand on its right when the operand on its left is null or undefined. Otherwise, it returns its left-hand-side operand:
null ?? "n/a" // "n/a" undefined ?? "n/a" // "n/a" false ?? true // false 0 ?? 100 // 0 "" ?? "n/a" // "" NaN ?? 0 // NaN
All of the operands shown in this code snippet are falsy values, meaning that they evaluate to false when forced into a boolean value. If we had used the more familiar logical OR operator (||
), the evaluation of the previous expressions would be different:
false || true // true 0 || 100 // 100 "" || "n/a" // "n/a" NaN || 0 // 0
When providing a fallback value for a nullable value, we recommend using ??
rather than ||
.
Two ways to deploy Node.js 14 on OpenShift
If you are familiar with the process of using an S2I image, you already know what to do. This discussion is for developers who are new to using S2I images.
There are at least two ways to quickly deploy an application using the new Node.js 14 image. One option is to use the oc new-app command
with a Git repo:
oc new-app registry.access.redhat.com/rhel8-beta/nodejs-14:latest~https://github.com/nodeshift-starters/nodejs-rest-http oc expose svc/nodejs-rest-http
Alternatively, you can use the Nodeshift module to deploy a local directory:
npx nodeshift --dockerImage=registry.access.redhat.com/rhel8-beta/nodejs-14 --expose
Get started with Node.js
I've introduced a couple of the JavaScript language features now available in Node.js 14. I also showed you two simple ways to get started with using Node.js 14 on OpenShift. To learn more about using Node.js, check out Lucas Holmquist's "Modern web applications on OpenShift" article series:
- Modern web applications on OpenShift: Part 1 — Web apps in two commands
- Modern web applications on OpenShift: Part 2 — Using chained builds
- Modern web applications on OpenShift: Part 3 — OpenShift as a development environment
See the Node.js 14 official announcement for even more about improvements and features in Node.js 14.