Ferenc Hámori co-CEO of RisingStack

2017 was a remarkable year for Node.js, according to Mark Hinkle - Executive Director of the Node Foundation - and we couldn’t agree more. Node.js has an enviable position in the world of tech: There are more than 8.8 million Node instances online every day which number has grown significantly in the past year. The number of Node.js contributors has increased from 1,100 to 1,500 in the past year, and there are 3 billion npm downloads every week.

The Node industry is clearly booming.

2017 has been an eventful one for RisingStack as well. This year has been rich in learning opportunities for us, and we made sure to create a plethora of new tutorials aimed at not only beginner, but advanced Node developers as well. We covered Microservices & new Node features too. We are thrilled to see that more than 1,5 million users learned something from us in 2017.

This also means that the number of developers who rely on the RisingStack blog for learning Node.js doubled over the past year.

We have numerous new ideas to write about in 2018; exciting tutorials, in-depth case studies, new features of Node, and much more. However, to prepare for the upcoming challenges & to say goodbye properly to 2017, we collected our best articles from this year.

We used hard data like pageviews, shares & search results to determine the most-liked articles we created in 2017. Here they come:

Our number one article of 2017 walks you through the 10 best practices for writing REST APIs. You’ll learn how to use HTTP methods, API Routes, and HTTP status correctly. We’ll also help to test your Node.js REST APIs, and select the right framework for doing it.

Authentication, the usage of conditional requests, rate limiting and creating API documentation are also essential factors of writing Node.js REST APIs, all of which are covered in this collection.

Are you planning to interview a Node.js developer? Or are you the Node developer who is about to get interviewed? We have good news for both of you!

We renewed our previous Node Q&A with up-to-date information for 2017. This updated version includes promises, Yarn, how to secure HTTP cookies against XSS attacks, and how to make sure your dependencies are safe.

With the help of this comprehensive Q&A collection, you can quickly revise the most important topics of Node.

Based on the Node.js Consulting & Development experience we gained at RisingStack in the past 4 years, we collected the most common techniques and architecture patterns which we recommend to use if you’d like to build and operate highly available microservices.

Communicating over a network instead of in-memory calls brings extra latency and complexity to a microservices system which requires cooperation between multiple physical and logical components. It’s crucial to get this cooperation right, so in this article, we discuss the risk of implementing microservices and patterns which help you detect, isolate and resolve issues.

Asynchronous constructs have been around in other languages for a while. With the release of Node.js 8, the long awaited async functions have landed in Node.js as well.

In this article, you will learn how you can simplify your callback or Promise based Node.js application with async functions (async/await).

If you liked the good old concepts of if-else conditionals and for/while loops, or if you believe that a try-catch block is the way errors are meant to be handled, you will have a great time rewriting your services using async/await .

In this Node.js & MySQL example project, you can learn how to effectively handle billions of rows of data that take up hundreds of gigabytes of storage space. We’ll take a look at table partitioning with an example and show you how to add and remove data from your database.

This article proves that ACID compliant DBMS solutions such as MySQL can be used when you are handling large amounts of data, so you don't necessarily need to give up the features of transactional databases.

Npm 4 became the default package manager with Node 7.4, but at the same time, Facebook also launched its own package manager called Yarn.

Let's take a look at the state of Node.js package managers, what they can do for you, and when you should pick which one!

Make sure to avoid the despised callback hell! We collected the best tools and techniques to handle async operations: async.js, promises, generator-based flow control, and async functions.

Stick to these rules to keep things smooth:

Prefer async over sync API, because using a non-blocking approach gives superior performance over the synchronous scenario.

Always use the best fitting flow control or a mix of them in order reduce the time spent waiting for I/O to complete.

The long-awaited Node 8 was released on the 30th of May. It arrived with a bunch of new features and improvements, and in this post, we go through the most important ones. Let’s revise the async hooks API, the N-API, and other notable changes in Node 8.

Also, during the year, there were other releases that we covered on our blog.

When Node.js 8.4.0 arrived, we introduced the most important aspects of HTTP/2 Server Push and showed you how to create a small Node.js app that uses it.

Then, we got excited about the new features of Node.js 8.5, so we created another post, dealing with ECMAScript Modules, Performance Hooks & the filesystem module .

What is an API gateway and why do we need it? In this article we go through the process of routing and versioning, authentication, data aggregation, serialisation, protocol transformation, and we’ll also see how to build an example API gateway.

We’ll discuss why is it so important to define clear responsibilities for our API Gateways and to include only generic shared logic. API gateways help to keep your services small and domain-focused, so it’s essential to get them right.

In this article we created an example project, where we show you how to build, structure, test, and debug a Node.js application written in TypeScript. We discuss what Typescript is and why is it beneficial to use it, as well as how to start a project with it. We cover adding linters, writing tests, and debugging.

Think about your future self! Would you like to work on code that's not tested properly? If not, read this guide on getting testing and TDD (test-driven development) right. Test driven development is a methodology for writing the tests first for a given module and for the actual implementation afterward.

This guide includes most of what we do here at RisingStack with TDD:

writing failing tests

writing code that satisfies our tests

and refactoring.

In this article, we discuss what to monitor exactly when you have a Node.js application in production. We tell how to instrument your system, what to consider when selecting your monitoring tool, and why we recommend Prometheus to use as a self hosted monitoring suite.

We also included our example repo, which can help you with more in-depth advice in case you'll choose this way of monitoring your Node.js application.

What can you do when you reach the maximum speed that Node.js has to offer? To increase the performance of your application, a possible solution is to write native modules with Rust instead of C++. It is a great choice thanks to the safety and ease of use it provides.

In this article, we’re going to walk you through the steps of writing a modern, fast and safe native module.

At RisingStack we love working with Microservices, as this kind of architecture gives us flexibility and speed. In this article we show how you can perform consumer driven contract testing in your Node.js microservices architecture with the Pact framework.

We’ll go through creating a mock server with Pact for our client-side unit tests, gathering them with Pact Broker and verifying them against our running server - making sure that the consumer and provider are on the same page.

In this post, you can read about client-side routing in Javascript. We’ll discuss how is it different from server-side routing and why should it be treated differently. This blogpost is the last part of the author’s “Writing a JavaScript Framework” series.

The series is about an open-source client-side framework, called NX. During the series, Bertalan explains the main difficulties he had to overcome while writing the framework.

Robert Czinege joined RisingStack this summer as a promising & talented junior developer, but he still needed to learn how we build amazing Node.js apps for our clients.

In his article, he talks about going through RisingStack’s Node.js Bootcamp, which helped him to get up to speed with the rest of the team. By the way, this bootcamp is available for everyone interested in learning Node.js - since we open sourced it on GitHub. So sucker punch imposter syndrome and kickstart learning Node.js!

Other meaningful achievements of 2017

And that’s not it. We were proud to organise and sponsor Nodeconf Budapest in 2017 January, which brought together the sharpest minds from the enterprise and the finest Node.js talent that Central-Europe has to offer. This conference served as a refreshing event for the Node community.

We were stoked to see experts like Danny Grander who talked about the importance of writing secure code or Daniel Khan, who shared what he learned over his 17-year career as a web developer; just to mention a few.

Another huge event in the life of RisingStack was that by the end of summer, we partnered up with Keymetrics & merged Trace - our Node.js Monitoring platform with their solution.

We were busy during this autumn as well, since we kicked off our European Node.js Tour which contained trainings on Node fundamentals, Microservices & Security as well. We’ll continue to provide trainings from the spring of 2018, widening our portfolio with React & Kubernetes events too.

As you see, the past year was eventful for us at Risingstack. We are excited about the new year, and we have a lot of plans & expectations for it. Also, thanks for following our path & reading our blog - it’s a pleasure to have such a great audience. <3

Stay tuned for more great news and tutorials from us in 2018 as well!