Вызов функции экспорта в Node.js

Я новичок в node.js

Я попробовал эту функцию ( foo.js)

module.exports.hello = function hello(name) {
 console.log("hello " + name);   
}

hello('jack');

но у меня есть эта ошибка

node foo.js
ReferenceError: hello is not defined

3 ответа

Решение

Создание функции на module.exports не делает эту функцию доступной глобально, но она сделает ее доступной для объекта, возвращаемого при запросе вашего файла из другого файла.

Поэтому, если мы удалим вызов hello из вашего файла foo.js:

module.exports.hello = function hello(name) {
 console.log("hello " + name);   
}

и создайте другой файл с именем bar.js в том же каталоге:

var foo = require('./foo');
foo.hello('jack');

Тогда мы получим желаемый результат:

tim [ ~/code/node-test ]$ node bar
hello jack
tim [ ~/code/node-test ]$ 

РЕДАКТИРОВАТЬ: В качестве альтернативы, если вы просто хотите определить функцию для использования в этом файле, вы можете просто определить обычную функцию на верхнем уровне следующим образом:

function hello(name) {
    console.log("hello " + name);
}

module.exports.hello = hello;

hello('jack');

Обратите внимание, что добавив его в module.exports мы все еще можем использовать функцию из bar.js, но если вам не нужна эта функциональность, вы можете пропустить эту строку.

Если вы действительно хотите придерживаться формата, который вы определили выше, вы можете позвонить:

module.exports.hello = function hello(name) {
    console.log("hello " + name);   
}

module.exports.hello('jack');

или еще более краткая последняя строка:

exports.hello('jack');

Надо отдать должное здесь, так как именно здесь я выяснил ответ, сначала найдя этот вопрос.

Я думаю, что это ошибка JavaScript, а не node.js

module.exports.hello = function hello(name)

мне кажется, что вы пытаетесь определить функцию, но функция def в js принимает 2 формы, одна использует литерал функции, например:

var x = function () {}

а другой

function x () {}

и вы, кажется, делаете смесь обоих

Другие вопросы по тегам