How do I include functions from other files in JavaScript/Node.js?
I have a file called app.js with the following code:
var express = require('express');
var app = express.createServer();
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.get('/', function(req, res){
res.render('index', {locals: {
title: 'NowJS + Express Example'
}});
});
app.listen(8080);
How can I import functions from a tools.js file to use in app.js? Is there a way to do a basic import of the tools.js file, or do I need to turn “tools” into a module and then require it?
To include functions from other files in Node.js, you need to use the require() function along with module.exports or exports in the source file. For your tools.js file, you’ll export functions using module.exports and then import them in app.js using require('./tools').
Contents
- Basic Module Import Pattern
- Creating and Exporting Functions
- Using Multiple Functions from tools.js
- Different Export Approaches
- Best Practices for Modularity
- Alternative Import Methods
Basic Module Import Pattern
In Node.js, every file is treated as a separate module by default. To share functionality between files, you need to explicitly export functions from one file and import them in another. The fundamental pattern involves:
- Exporting from the source file using
module.exports - Importing in the destination file using
require()
For your specific case, you’ll need to modify both files to establish this connection between app.js and tools.js.
Creating and Exporting Functions
Let’s create a tools.js file with some functions you want to use:
// tools.js
function greetUser(name) {
return `Hello, ${name}! Welcome to our application.`;
}
function formatTitle(title) {
return title.toUpperCase();
}
function validateInput(input) {
return input && input.trim().length > 0;
}
// Export the functions
module.exports = {
greetUser: greetUser,
formatTitle: formatTitle,
validateInput: validateInput
};
You can also use the shorthand property notation if the variable names match:
// tools.js (shorthand version)
function greetUser(name) {
return `Hello, ${name}! Welcome to our application.`;
}
function formatTitle(title) {
return title.toUpperCase();
}
function validateInput(input) {
return input && input.trim().length > 0;
}
module.exports = {
greetUser,
formatTitle,
validateInput
};
Using Multiple Functions from tools.js
Now modify your app.js to import and use these functions:
var express = require('express');
var app = express.createServer();
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
// Import functions from tools.js
var tools = require('./tools');
app.get('/', function(req, res){
var title = 'NowJS + Express Example';
var formattedTitle = tools.formatTitle(title);
var greeting = tools.greetUser('Visitor');
res.render('index', {
locals: {
title: formattedTitle,
greeting: greeting
}
});
});
// Using validation function in another route
app.get('/submit', function(req, res) {
var userInput = req.query.input;
if (tools.validateInput(userInput)) {
res.send('Valid input received: ' + userInput);
} else {
res.send('Invalid input. Please try again.');
}
});
app.listen(8080);
Different Export Approaches
There are several ways to export functions from a module in Node.js:
1. Individual Exports
// tools.js
exports.greetUser = function(name) {
return `Hello, ${name}!`;
};
exports.formatTitle = function(title) {
return title.toUpperCase();
};
2. Single Function Export
If you only want to export one function:
// tools.js
function greetUser(name) {
return `Hello, ${name}!`;
}
module.exports = greetUser;
Then use it in app.js:
var greetUser = require('./tools');
app.get('/', function(req, res) {
var greeting = greetUser('Visitor');
// ...
});
3. Constructor/Class Export
For more complex functionality:
// tools.js
function Tools() {}
Tools.prototype.greetUser = function(name) {
return `Hello, ${name}!`;
};
Tools.prototype.formatTitle = function(title) {
return title.toUpperCase();
};
module.exports = new Tools();
Best Practices for Modularity
File Organization
- Keep related functions together in logical modules
- Use descriptive file names (e.g.,
userTools.jsinstead oftools.js) - Separate concerns - don’t mix data access, business logic, and presentation
Export Patterns
- Be consistent with your export style across the project
- Use named exports for multiple related functions
- Consider using ES6 modules (
export/import) if your Node.js version supports it
Error Handling
// tools.js with error handling
function processSafely(callback, ...args) {
try {
return callback(...args);
} catch (error) {
console.error('Error in tools module:', error);
return null;
}
}
module.exports = {
processSafely,
greetUser: (name) => processSafely((n) => `Hello, ${n}!`, name)
};
Alternative Import Methods
Relative vs Absolute Paths
- Use relative paths (
./tools,../lib/utils) for local modules - Use absolute paths (
require('path')) for built-in or installed modules
Asynchronous Loading
For scenarios where you need dynamic module loading:
// Dynamically load a module
function loadTools() {
return new Promise((resolve, reject) => {
try {
const tools = require('./tools');
resolve(tools);
} catch (error) {
reject(error);
}
});
}
// Usage
loadTools()
.then(tools => {
console.log(tools.greetUser('Dynamic'));
})
.catch(error => {
console.error('Failed to load tools:', error);
});
Module Caching
Node.js automatically caches modules after the first require. If you need fresh instances:
// Clear require cache for a module
delete require.cache[require.resolve('./tools')];
const freshTools = require('./tools');
Conclusion
- Use
require()andmodule.exportsto share functions between Node.js files - this is the fundamental pattern for code reuse - Export functions from tools.js using
module.exports = { functionName }syntax - Import in app.js using
var tools = require('./tools')and call functions withtools.functionName() - Choose appropriate export patterns based on your needs - single function, multiple functions, or class-based exports
- Follow modular practices by keeping related functions together and maintaining consistent export styles
- Consider error handling in your modules to make them more robust and prevent application crashes
The basic approach you asked about is indeed the standard Node.js way - you need to turn “tools” into a module using module.exports and then require it in your main file. This pattern scales well as your application grows and becomes essential for maintaining clean, organized code.
Sources
(Note: No web search results were available for this query, so this answer is based on established Node.js documentation and common practices.)