Как в Node.js "подключить" функции из других файлов?
Вопрос: Как импортировать функции из файла tools.js
в app.js
?
У меня есть файл app.js
, который выглядит достаточно просто:
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);
Теперь я хочу использовать некоторые функции из файла tools.js
. Как я могу их импортировать в app.js
?
Или, возможно, мне нужно превратить tools.js
в модуль и затем использовать require
для его подключения? Это кажется сложным, мне бы хотелось просто импортировать файл tools.js
, не усложняя.
Существуют ли более простые способы для импортирования функций из одного файла в другой в Node.js?
5 ответ(ов)
Вы можете подключать любой файл JavaScript, просто нужно объявить, что вы хотите экспортировать.
В вашем файле tools.js
вы экспортируете функции foo
и bar
, используя module.exports
:
// tools.js
// ========
module.exports = {
foo: function () {
// любая логика
},
bar: function () {
// любая логика
}
};
var zemba = function () {
// эта функция не будет экспортирована
}
Таким образом, функции foo
и bar
станут доступными при подключении этого модуля.
Теперь в вашем основном файле app.js
вы можете подключить tools.js
и увидеть, какие функции доступны:
// app.js
// ======
var tools = require('./tools');
console.log(typeof tools.foo); // => 'function' - доступно
console.log(typeof tools.bar); // => 'function' - доступно
console.log(typeof tools.zemba); // => undefined - недоступно
Функция zemba
не экспортируется, поэтому ее тип будет undefined
. Чтобы сделать функцию доступной, ее нужно добавить в объект module.exports
.
Вы можете обойтись без создания новых функций или модулей. Вам просто нужно выполнить модуль, который вы вызываете, если вы не хотите использовать пространство имен.
в tools.js
module.exports = function() {
this.sum = function(a, b) { return a + b };
this.multiply = function(a, b) { return a * b };
// и т.д.
}
в app.js
или в любом другом .js, например, myController.js:
вместо
var tools = require('tools.js');
что заставляет вас использовать пространство имен и вызывать функции как tools.sum(1, 2);
вы можете просто вызвать
require('tools.js')();
и тогда сможете использовать
sum(1, 2);
В моем случае у меня есть файл с контроллерами ctrls.js:
module.exports = function() {
this.Categories = require('categories.js');
}
И я могу использовать Categories
в любом контексте как публичный класс после вызова require('ctrls.js')()
.
Если вам нужно создать два JavaScript файла, вот простой пример, как это сделать.
- Создайте файл
cal.js
с следующем содержимым:
// File cal.js
module.exports = {
sum: function(a, b) {
return a + b;
},
multiply: function(a, b) {
return a * b;
}
};
Этот файл экспортирует объект с двумя методами: sum
, который складывает два числа, и multiply
, который их перемножает.
- Создайте главный файл
app.js
с кодом:
// File app.js
var tools = require("./cal.js");
var value = tools.sum(10, 20);
console.log("Value: " + value);
В этом файле вы импортируете cal.js
и используете метод sum
, чтобы сложить два числа (10 и 20), а затем выводите результат в консоль.
Консольный вывод
При выполнении app.js
в консоли вы увидите следующий результат:
Value: 30
Таким образом, вы создали два файла JavaScript и использовали один из них для выполнения математической операции и вывода результата.
Вы можете создать два файла, например, app.js
и tools.js
, чтобы продемонстрировать, как использовать модули в Node.js. Вот примеры кода для этих файлов.
app.js
const tools = require("./tools.js");
var x = tools.add(4, 2);
var y = tools.subtract(4, 2);
console.log(x);
console.log(y);
tools.js
const add = function(x, y) {
return x + y;
}
const subtract = function(x, y) {
return x - y;
}
module.exports = {
add,
subtract
}
Вывод
Когда вы выполните app.js
, вы получите следующий вывод в консоли:
6
2
Объяснение
В файле
tools.js
мы определяем две функции:add
для сложения иsubtract
для вычитания. Затем мы экспортируем их с помощьюmodule.exports
, чтобы они могли использоваться в других файлах.В файле
app.js
мы импортируем наши функции изtools.js
с помощьюrequire()
. Затем мы вызываем эти функции с аргументами и выводим результаты в консоль.
Теперь вы можете использовать эти простые функции в своих проектах, подключая их из tools.js
в любом другом файле.
Вот простое объяснение:
Содержимое файла Server.js:
// Подключаем публичные функции из файла 'helpers.js'
var helpers = require('./helpers');
// Предположим, что это данные, которые пришли из базы данных или откуда-то еще
var databaseName = 'Уолтер';
var databaseSurname = 'Уайт';
// Используем функцию из 'helpers.js' в главном файле server.js
var fullname = helpers.concatenateNames(databaseName, databaseSurname);
Содержимое файла Helpers.js:
// 'module.exports' — это особенность node.js, она не работает с обычным JavaScript
module.exports =
{
// Это функция, которая будет вызываться в главном файле server.js
// Параметры 'name' и 'surname' будут переданы в функцию
// когда функция будет вызвана в главном файле.
// Пример: concatenateNames('Джон', 'Доу');
concatenateNames: function (name, surname)
{
var wholeName = name + " " + surname;
return wholeName;
},
sampleFunctionTwo: function ()
{
}
};
// Приватные переменные и функции, которые будут недоступны вне этого файла
var privateFunction = function ()
{
};
Таким образом, в вашем коде происходит подключение отдельных функций из файла 'helpers.js' в 'server.js', что позволяет организовать код и использовать функции в разных частях вашего проекта.
Использование async/await с циклом forEach
Запись в файлы в Node.js
Функция map для объектов (вместо массивов)
Как получить полный объект в console.log() Node.js, а не '[Object]'?
Как прочитать JSON-файл в память сервера?