Я пытаюсь потребовать файл, а затем передать его в var. Я следую этому руководству по созданию системы аутентификации. После написания файла 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);
javascript
node.js
require
тайги100
источник
источник
console.log(require)
перед ошибкой линии? На стороне сервера не требуется requireJS, в node.js встроена модульная система (CommonJS также используетrequire
функцию). Кажется, что-то меняет глобальнуюrequire
переменную.Ответы:
Я думаю, это означает, что
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
и, таким образом, попытка вызвать это как функцию не будет работать. Исправление в этом случае состоит в том, чтобы удалить циклическую зависимость, обычно путем разбивки общего кода на третий модуль, который оба могут загружаться отдельно, хотя особенности исправления циклической зависимости уникальны для каждой ситуации.источник
module.exports.functionName = function functionName(app, passport) { ... }
require('./app/routes')(app, passport);
что не будет работать так, как вы показываете экспорт.Для меня, когда я выполняю функцию с немедленным вызовом, мне нужно поставить
;
в концеrequire()
.Ошибка:
const fs = require('fs') (() => { console.log('wow') })()
Хороший:
const fs = require('fs'); (() => { console.log('wow') })()
источник
() => {}
в качестве аргумента тому, что возвращаетrequire( ... )
. Ужасно!puppeteer
и почти запросил там проблему, пока не нашел ее здесь. Уф ... никогда не думал, что;
это меня так сильно беспокоит.;(() => {})()
Для меня это была проблема с циклическими зависимостями.
IOW, для модуля A требуется модуль B, а для модуля B требуется модуль A.
Таким образом, в модуле B
require('./A')
это пустой объект, а не функция.Как бороться с циклическими зависимостями в Node.js
источник
У меня аналогичная ошибка возникла при переключении между ветвями - одна использовала более новую («машинописную») версию
@google-cloud/datastore
пакетов, которая возвращает объект с конструктором хранилища данных в качестве одного из свойств экспортируемого объекта, и я переключился на другую ветку для задачи, более старую версию хранилища данных. был использован там, который экспортирует конструктор хранилища данных "напрямую" какmodule.exports
значение. Я получил ошибку, потому что у node_modules все еще были новые модули, используемые веткой, с которой я переключился.источник
Я тоже сталкивался с чем-то подобным. в вашем файле маршрутов экспортируйте функцию как объект, подобный этому:
module.exports = { hbd: handlebar }
и в вашем файле приложения вы можете получить доступ к функции через .hbd, и проблем нет ....!
источник
Не забудьте экспортировать ваш
routes.js
.В
routes.js
, напишите ваши маршруты и весь код в этой функции модуля:exports = function(app, passport) { /* write here your code */ }
источник
Просто оберните функцию стрелки там, где вам нужны файлы
источник