04
Mon, Nov
6 New Articles

TechTip: Node.js Is Here. What to Do?

General
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

 

In the fall of 2014, IBM introduced the Node.js platform to IBM i. Learn what it is and what you can do with it.

 

Right now is a very exciting time for open source on IBM i. Not only have a number of new technologies like Ruby and Node.js garnered formal ports to the machine, there are also hints of what's coming next from IBM on their developerWorks sitein particular, Python, gcc, and Git. Each of these has already been made to work on IBM i by way of perzl.org, but now IBM is making them additions to the new 5733OPS licensed program, which means they are fully supported. That's a big deal because it conveys intent and direction!

 

Speaking of 5733OPS and Node.js, head on over to the IBM i Node.js developerWorks site to get installation instructions. It's free! If you can't install Node.js on your IBM i today, then take a look at http://c9.io to set up a free browser-based development environment in the cloud. c9.io is written in Node.js, runs on IBM i, and is what I used to develop this tutorial!

Once 5733OPS is installed, you can run the following commands in PASE to set up your environment. Doing this will allow you to invoke Node.js from any directory while in PASE. PASE can be accessed either through CALL QP2TERM from the 5250 command line or SSH into your machine using a terminal client (I like this Chrome plugin). If you'd like more info on SSH config for your IBM i, please check out this page I've set up.

 

$ export PATH=/QOpenSys/QIBM/ProdData/Node/bin:$PATH
$ export LIBPATH=/QOpenSys/QIBM/ProdData/Node/bin:$LIBPATH

The PATH environment variable is like a library list in that it declares what directories should be searched when commands are run. Similarly, the LIBPATH environment variable declares where to look for shared libraries that the node binary requires. Note that a "shared library" is completely different than a QSYS.LIB library.

Now we can test to see if we have access to the node binary by typing the node -v command, as shown below.

$ node -v

v0.10.29

I may have gotten ahead of myself. At this point, you've set up Node.js but don't yet know what it is. Over at nodejs.org, we're able to obtain the following definition:

"Node.js® is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices."

Lots of words in that definition that don't actually describe what it's most used for: web applications on the Internet. Wait...what?  Another web-capable language on i? We already have RPG, PHP, Java, Ruby, and other languages. Why would I consider Node.js? Well, one thing that has my attention is the fact that Node.js is written in JavaScript. That means we can use a single language on both the client and the server side of our development. There's also an extensive package system named Node Package Manager (NPM). This tool makea it incredibly easy to share code. To emphasize that point, I'm going to show how easy it is to save a PDF up to Amazon's S3 service by downloading their package (aka module) named aws-sdk.

Amazon's S3 service can be used for many business and personal things. For example, I back up my Mac to S3 using the Arq tool. Another use is for Content Delivery Network (CDN) purposes: a way to offload bandwidth-hogging files to other servers on the Internet. The latter is what we'll focus on with a described business need of putting PDFs from the IFS up on S3.

First things first: Start up a shell session and create a new folder for this tutorial titled nodejs_s3, as shown below.

$ mkdir nodejs_s3

$ cd nodejs_s3

Next, we want to obtain the aws-sdk module using the npm install command, as shown below. Note: "aws" stands for Amazon Web Services, and "sdk" stands for Software Development Kit. You can find Amazon's Node.js SDK documentation here.

$ npm install aws-sdk

This email address is being protected from spambots. You need JavaScript enabled to view it. node_modules/aws-sdk

??? xmlbuilder@0.4.2

??? xml2js@0.2.8

??? sax@0.5.3

This is where some cool stuff happens. Communication is made to the npmjs.org server to see if a module with the name of aws-sdk exists. If it does, the server will download it and inspect its package.json file for dependencies, which will then also be downloaded and installed. The package.json file can contain many details about a module or Node.js application, including what other modules it depends on, including xmlbuilder, xml2js, and sax, in this case. You can learn more about the package.json file here.

Next, we need to use the APIs from the aws-sdk module to send a PDF in the IFS to Amazon. Below is an entire app.js program that accomplishes the task at hand.

---app.js---

var AWS = require('aws-sdk');

var fs = require('fs');

AWS.config.update({

 accessKeyId: 'AKxxxxxxxxxxxxOA',

 secretAccessKey: 'OdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxCn',

 region: 'us-east-1'

});

var fileName = 'hello.pdf';

var s3 = new AWS.S3();

s3.putObject({

 Bucket: 'litmis',

 Key: fileName,

 Body: fs.createReadStream(fileName),

 ACL: 'public-read'

}, function (err) {

 if (err) { throw err; }

});

The first two lines are bringing in outside functionality, much like RPG's /COPY statement. The Node.js runtime will first search the current directory for a node_modules directory to resolve module aws-sdk, which in this case will be found because we just installed it. The 'fs' require statement is bringing in file system functionality from the base Node.js implementation. This will be used later, when we start uploading to Amazon.

Next, we see the AWS.config.update for credentials (repeated again below). This is how we authenticate with the Amazon S3 server. You can find the documentation for getting your own credentials here. Also in this portion of code is where we specify the location of our region, a value specified when you create a bucket in S3. A bucket is a means of organizing things on Amazon's end.

AWS.config.update({

 accessKeyId: 'AKxxxxxxxxxxxxOA',

 secretAccessKey: 'OdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxCn',

 region: 'us-east-1'

});

Now, we're going to create a new s3 variable so we can gain access to the s3.putObject() method. To learn more about JavaScript objects, head over to w3schools.com. The first parameter of putObject is a JavaScript object with properties for the file to be uploaded. The Bucket property needs to already exist and can be created through the Amazon AWS console. They Key property is the name of the file as we want it on S3. The Body property is the contents of the hello.pdf file, which will be streamed vs. read in full. The ACL property is how we can set access controlor rather, permissions. By default, S3 will deny access to public, but if we want to make this PDF available to everyone, we need to set the ACL to 'public-read'.

The second parameter to putObject is an anonymous function that will be called if an error occurs while putting the object on Amazon S3. Understanding how functions work in JavaScript is very important because they have a number of characteristics that make them different from what we have with RPG subprocedures. You can learn more about JavaScript functions here.

var fileName = 'hello.pdf';

var s3 = new AWS.S3();

s3.putObject({

 Bucket: 'litmis',

 Key: fileName,

 Body: fileStream,

 ACL: 'public-read'

}, function (err) {

 if (err) { throw err; }

});

To run app.js, you can do the following from your shell session. If your PDF is small, it should only take a second or two.

$ node app.js

Once complete, and if no errors are thrown, you can go and check your Amazon S3 account. It should look similar to the below screenshot. As you can see, we are in the "litmis" bucket looking at the link property for file hello.pdf.

042415BartellFigure1 aws s3
Figure 1: The litmis bucket shows the link property for file hello.pdf.

 

Clicking on that link will allow me to download the PDF from Amazon S3 instead of from the IBM i. Next steps would be to put that link into a webpage being served up by a Node.js application on IBM i, like so:

<a href="/https://s3.amazonaws.com/litmis/hello.pdf">Show PDF</a>

One last thing I want to introduce you to is the Node.js REPL (Read, Eval, Print, Loop), which can be used for testing your Javascript code interactively. For example, while writing this tutorial, I had a Node.js REPL session open and incrementally changed the Javascript until I had it just right and working. This is a big timesaver because it allows me to not only make changes and test them quicker, but also see other properties of objects. Below is a screenshot of pasting the entire finished program into a node REPL session. You start the REPL by entering node with no parameters in the shell prompt. You'll notice toward the end of the screenshot that the response from Amazon is output to the screen, which is helpful for debugging purposes.

 

042415BartellFigure2 node repl

Figure 2: You can paste the finished program into a node REPL session.


That completes this tutorial. Hopefully, you now have some perspective for how simple it is to obtain a module written by another party and include it in your application. This functionality truly allows the next generation of languages and frameworks to take off much faster, all the while giving your business a competitive advantage by delivering solutions in a more timely fashion.

On final note, you can bookmark the Litmis Bitbucket Node.js wiki to keep up to date on everything the Litmis team is doing with Node.js.

 

Aaron Bartell

Aaron Bartell is Director of IBM i Innovation for Krengel Technology, Inc. Aaron facilitates adoption of open-source technologies on IBM i through professional services, staff training, speaking engagements, and the authoring of best practices within industry publications andwww.litmis.comWith a strong background in RPG application development, Aaron covers topics that enable IBM i shops to embrace today's leading technologies, including Ruby on Rails, Node.js, Git for RPG source change management, and RSpec for unit testing RPG. Aaron is a passionate advocate of vibrant technology communities and the corresponding benefits available for today's modern application developers. Connect with Aaron via email atThis email address is being protected from spambots. You need JavaScript enabled to view it..

Aaron lives with his wife and five children in southern Minnesota. He enjoys the vast amounts of laughter that having a young family brings, along with camping and music. He believes there's no greater purpose than to give of our life and time to help others.

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  • SB Profound WC 5536 Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application. You can find Part 1 here. In Part 2 of our free Node.js Webinar Series, Brian May teaches you the different tooling options available for writing code, debugging, and using Git for version control. Brian will briefly discuss the different tools available, and demonstrate his preferred setup for Node development on IBM i or any platform. Attend this webinar to learn:

  • SB Profound WP 5539More than ever, there is a demand for IT to deliver innovation. Your IBM i has been an essential part of your business operations for years. However, your organization may struggle to maintain the current system and implement new projects. The thousands of customers we've worked with and surveyed state that expectations regarding the digital footprint and vision of the company are not aligned with the current IT environment.

  • SB HelpSystems ROBOT Generic IBM announced the E1080 servers using the latest Power10 processor in September 2021. The most powerful processor from IBM to date, Power10 is designed to handle the demands of doing business in today’s high-tech atmosphere, including running cloud applications, supporting big data, and managing AI workloads. But what does Power10 mean for your data center? In this recorded webinar, IBMers Dan Sundt and Dylan Boday join IBM Power Champion Tom Huntington for a discussion on why Power10 technology is the right strategic investment if you run IBM i, AIX, or Linux. In this action-packed hour, Tom will share trends from the IBM i and AIX user communities while Dan and Dylan dive into the tech specs for key hardware, including:

  • Magic MarkTRY the one package that solves all your document design and printing challenges on all your platforms. Produce bar code labels, electronic forms, ad hoc reports, and RFID tags – without programming! MarkMagic is the only document design and print solution that combines report writing, WYSIWYG label and forms design, and conditional printing in one integrated product. Make sure your data survives when catastrophe hits. Request your trial now!  Request Now.

  • SB HelpSystems ROBOT GenericForms of ransomware has been around for over 30 years, and with more and more organizations suffering attacks each year, it continues to endure. What has made ransomware such a durable threat and what is the best way to combat it? In order to prevent ransomware, organizations must first understand how it works.

  • SB HelpSystems ROBOT GenericIT security is a top priority for businesses around the world, but most IBM i pros don’t know where to begin—and most cybersecurity experts don’t know IBM i. In this session, Robin Tatam explores the business impact of lax IBM i security, the top vulnerabilities putting IBM i at risk, and the steps you can take to protect your organization. If you’re looking to avoid unexpected downtime or corrupted data, you don’t want to miss this session.

  • SB HelpSystems ROBOT GenericCan you trust all of your users all of the time? A typical end user receives 16 malicious emails each month, but only 17 percent of these phishing campaigns are reported to IT. Once an attack is underway, most organizations won’t discover the breach until six months later. A staggering amount of damage can occur in that time. Despite these risks, 93 percent of organizations are leaving their IBM i systems vulnerable to cybercrime. In this on-demand webinar, IBM i security experts Robin Tatam and Sandi Moore will reveal:

  • FORTRA Disaster protection is vital to every business. Yet, it often consists of patched together procedures that are prone to error. From automatic backups to data encryption to media management, Robot automates the routine (yet often complex) tasks of iSeries backup and recovery, saving you time and money and making the process safer and more reliable. Automate your backups with the Robot Backup and Recovery Solution. Key features include:

  • FORTRAManaging messages on your IBM i can be more than a full-time job if you have to do it manually. Messages need a response and resources must be monitored—often over multiple systems and across platforms. How can you be sure you won’t miss important system events? Automate your message center with the Robot Message Management Solution. Key features include:

  • FORTRAThe thought of printing, distributing, and storing iSeries reports manually may reduce you to tears. Paper and labor costs associated with report generation can spiral out of control. Mountains of paper threaten to swamp your files. Robot automates report bursting, distribution, bundling, and archiving, and offers secure, selective online report viewing. Manage your reports with the Robot Report Management Solution. Key features include:

  • FORTRAFor over 30 years, Robot has been a leader in systems management for IBM i. With batch job creation and scheduling at its core, the Robot Job Scheduling Solution reduces the opportunity for human error and helps you maintain service levels, automating even the biggest, most complex runbooks. Manage your job schedule with the Robot Job Scheduling Solution. Key features include:

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • LANSAWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed. Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

  • LANSASupply Chain is becoming increasingly complex and unpredictable. From raw materials for manufacturing to food supply chains, the journey from source to production to delivery to consumers is marred with inefficiencies, manual processes, shortages, recalls, counterfeits, and scandals. In this webinar, we discuss how:

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • Profound Logic Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application.

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: