Custom Node Modules
Objectives
Discuss uses of custom node modules
Utilize require and export to build module
Utilize callbacks for async module methods
So far we have been utilizing many npm packages and node modules in our work to solve certain problems. However, what happens when there isn't an npm package for what you're looking for? Or you want to create DRY, modularized code instead of writing that dumb request 20 times?
If this is the case, then we need to write our own custom node modules.
Getting Started: Calculator module
Let's start with a simple module that will contain some basic calculator functions.
To get started, create a new folder, and initialize npm. Next we'll create two files, one for our calculator module, and another to utilize our module.
Building the Add function
We're going to start with our calculator.js module file and build out the Add function:
What's happening here is we're exporting a basic Object using the module.exports
property. This setting is required to allow other parts of our code to access this module, think of it as the module's public interface. Then we can add whatever properties or functions we want exposed outside our module to that object.
Next lets use require
in our index.js to pull in the calculator module and call the add function:
So here we're requiring or importing our calculator module using the require
function and the file path to the calculator.js file. We then get access to whatever we exported in that file, in this case the object that contains our add function.
Exercise
Build out the 3 other functions for our calculator:
subtract
multiply
divide
Making Something Useful - OMDB
While a calculator module is all well and good, it doesn't necessarily solve a problem for us. Let's test out our new module building skills by building a nice OMDB API module that makes issuing requests to OMDB easier.
First lets create a new file called omdb_api.js and install the request
module so we can send requests:
Next we need to build out our module. Lets think about what typical requests we would send to OMDB API. The two most common uses we've seen are: - Searching - Find by IMDBID
Lets start by adding the Search function.
Let's break down a few parts of that code.
First we installed and use require
to pull the newly installed request
module into our custom module so that we can make ajax requests.
Next we created a new function called search which contains our ajax request. Note the arguments for this function. The first argument is pretty self-explanatory, it is the search term string for search omdb.
The second argument is the real magic here. The second argument is actually a function that we are going to pass into the search function when we call it. We call it a callback because it's going to call-back to the original place where called search.
The reason we do this is because we are executing an asynchronous request for OMDB data. So we don't want anything to happen until we get that data back which is why we call the callback function in our request promise function.
Finally lets utilize our awesome omdb module in our index.js:
Notice that our second argument when we call search is an anonymous function. Javascript is nice in that it will allow us to define a function like so and pass that around into other functions, which is what we're doing here. That anonymous function will be assigned to the callback argument in our search function in the omdb_api.js file.
Exercise
Build out the IMDB search function for our module
Hint: Check our notes in the express api's section and the OMDB API docs.
Last updated