Подтвердить что ты не робот

NodeJs: TypeError: require (...) не является функцией

Я пытаюсь потребовать файл, а затем передаю его в var. Я следую инструкциям this для создания системы аутентификации. После написания файла server.js и попыток скомпилировать, я получил ошибку bson, поэтому я изменил строку, которая потребовала версию релиза в mongoose.

Вот мой код и ошибка:

server.js

    require('./app/routes')(app, passport);

Ошибка

require('./app/routes')(app, passport);
                   ^

TypeError: require(...) is not a function
           at Object.<anonymous> (d:\Node JS learning\WorkWarV2\server.js:38:24)
           at Module._compile (module.js:434:26)
           at Object.Module._extensions..js (module.js:452:10)
           at Module.load (module.js:355:32)
           at Function.Module._load (module.js:310:12)
           at Function.Module.runMain (module.js:475:10)
           at startup (node.js:117:18)
           at node.js:951:3

Process finished with exit code 1

Я читал, что это обычно означает, что requireJS не загружается должным образом, но я не знаю, почему и как его исправить.

Изменить из-за комментария:

Как уже было сказано, здесь является результатом console.log(require);

4b9b3361

Ответ 1

Я думаю, это означает, что module.exports в вашем модуле ./app/routes не назначена как функция, поэтому require('./app/routes') не разрешает функцию, поэтому вы не можете вызывать ее как функцию, подобную этой require('./app/routes')(app, passport).

Покажите нам ./app/routes, если вы хотите, чтобы мы прокомментировали это далее.

Это должно выглядеть примерно так;

module.exports = function(app, passport) {
    // code here
}

Вы экспортируете функцию, которая затем может быть вызвана как require('./app/routes')(app, passport).


Еще одна причина, по которой может возникнуть подобная ошибка, заключается в том, что у вас есть циклическая зависимость от модуля, где модуль A пытается require(B), а модуль B пытается require(A). Когда это происходит, она будет обнаружена подсистемой require(), и одна из них вернется как null, и, таким образом, попытка вызвать ее как функцию не будет работать. В этом случае исправление заключается в удалении циклической зависимости, обычно путем разбивки общего кода на третий модуль, который можно загружать по отдельности, хотя особенности исправления циклической зависимости уникальны для каждой ситуации.

Ответ 2

Для меня, когда я выполняю функцию немедленного вызова, мне нужно поставить ; в конце require().

Ошибка:

const fs = require('fs')

(() => {
  console.log('wow')
})()

Хорошо:

const fs = require('fs');

(() => {
  console.log('wow')
})()

Ответ 4

Для меня я получил аналогичную ошибку при переключении между ветвями - одна использовала более новую ("typcriptish") версию пакетов @google-cloud/datastore, которая возвращает объект с конструктором Datastore как одно из свойств экспортируемого объекта, и я переключился на другую ветку для задачи, там использовалась более старая версия хранилища данных, которая экспортирует конструктор хранилища данных "напрямую" как значение module.exports. Я получил ошибку, потому что у node_modules все еще были более новые модули, используемые веткой, с которой я переключился.

Ответ 5

Установка модуля автозагрузки разрешила мою проблему.

npm install autoloader.

И измените свой код следующим образом. От: require('autoloader').autoload(__dirname + '/src'); до require('autoloader')(__dirname + '/src');

Примечание. Убедитесь, что имя модуля.. autoload у нас много модулей.

Ответ 6

Не забудьте экспортировать routes.js.

В routes.js напишите ваши маршруты и весь свой код в этом функциональном модуле:

exports = function(app, passport) {

/* write here your code */ 

}