@LemanRass09

TypeError: roulette.testFunc is not a function?

Столкнулся с невероятной проблемой.
А невероятна она тем, что в ней на мой взгляд тут нечему ломаться потому как это основы, больше того, в других скриптах этого же проекта эта же задача выполняется превосходно а именно в этом - нет.

Речь идет о экспорте функции и получении доступа к ней через require.

Есть скрипт test.js и лежит он по пути Site/routes/test.js
В нем вот так определена тестовая функция:
function testFunc() {
    return "Hello world!";
}
exports.testFunc = testFunc;


Так же есть другой скрипт socket.js который лежит по пути Site/lib/socket.js
Его содержимое (скрыт лишний код):
var test = require('../routes/test.js');
console.log(test.testFunc());


На этапе выполнения я получаю ошибку:
TypeError: test.testFunc is not a function

Ну что тут может быть не так?
При этом у меня есть еще 1 скрипт log.js который находится по пути Site/lib/log.js
Он подключен в скрипт socket.js таким же образом как и test.js
var log = require('../lib/log.js');
В скрипте log есть метод Debug который выводит сообщение в консоль + текстовый файл.
exports.Debug = function(msg) {
    msg = GetDateTimeString() + " [DEBUG] " + msg;
    console.log(msg);
    fs.appendFile('logs.txt', msg + "\n", 'utf8', function (err) {
        if(err) throw err;
    });
}

И он спокойно вызывается из скрипта socket.js.
Ну как блин так 2 скрипта, оба подключаются одинаково в 1. Но при этом методы первого вызываются нормально а методы второго - выдают ошибку?

Пока писал, на ум пришло всего 2 варианта почему это может случиться. Единственные 2 разницы между подключаемыми скриптами.
1) В скрипт test.js подключается скрипт socket.js а потом выходит что в скрипт socket.js подключается test.js. С логом такого нет.
2) Может те скрипты что лежат в routes нельзя подключать из-за экспресса?

UPD: Первый вариант ложный. Подключил соккет в лог и это не повлияло на работу.
Второй вариант вроде верный. Создал другой файл в другой папке, перенес туда эту тест функцию из скрипта test.js и подключил в соккет. Результат: Работает нормально. Видимо из папки routes скрипты которые задействованы экспрессом подключать нельзя. Если кто может сформулировать это правило с объяснениями - буду рад.
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
либо кольцевые зависимости либо переопределение module.exports
если приведете полный код test.js можно будет сказать точнее
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 00:29
2000 руб./за проект
01 мая 2024, в 00:20
15000 руб./за проект
30 апр. 2024, в 23:39
3000 руб./за проект