Estou tentando solicitar um arquivo e depois passá-lo para um var. Estou seguindo este tutorial para criar um sistema de autenticação. Depois de escrever o arquivo server.js e tentar compilar, recebi um erro de bson, portanto, alterei a linha que exigia a versão de lançamento dele no mongoose.
Aqui estão meu código e erro:
server.js
require('./app/routes')(app, passport);
Erro
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
Eu li que isso geralmente significa que o requireJS não está sendo carregado corretamente, mas não sei por que ou como consertar.
Editar devido ao comentário:
Conforme solicitado, aqui está o resultado deconsole.log(require);
javascript
node.js
require
taigi100
fonte
fonte
console.log(require)
antes da linha que falha? Você não deve precisar de requireJS no lado do servidor, node.js tem um sistema de módulo embutido (CommonJS, também usarequire
função). Algo parece estar mudando arequire
variável global .Respostas:
Eu acho que isso significa que
module.exports
em seu./app/routes
módulo não está atribuído para ser uma função, portantorequire('./app/routes')
, não resolve para uma função, portanto, você não pode chamá-lo como uma função como estarequire('./app/routes')(app, passport)
.Mostre-nos
./app/routes
se você deseja que comentemos mais sobre isso.Deve ser parecido com isto;
module.exports = function(app, passport) { // code here }
Você está exportando uma função que pode ser chamada como
require('./app/routes')(app, passport)
.Uma outra razão pela qual um erro semelhante poderia ocorrer é se você tiver uma dependência de módulo circular onde o módulo A está tentando
require(B)
e o módulo B está tentandorequire(A)
. Quando isso acontecer, ele será detectado pelorequire()
subsistema e um deles voltará comonull
e, portanto, tentar chamar isso como uma função não funcionará. A correção nesse caso é remover a dependência circular, geralmente dividindo o código comum em um terceiro módulo que ambos podem carregar separadamente, embora as especificações de corrigir uma dependência circular sejam exclusivas para cada situação.fonte
module.exports.functionName = function functionName(app, passport) { ... }
require('./app/routes')(app, passport);
que não vai funcionar da maneira que você mostra a exportação.Para mim, quando faço a função Imediatamente invocado, preciso colocar
;
no final derequire()
.Erro:
const fs = require('fs') (() => { console.log('wow') })()
Boa:
const fs = require('fs'); (() => { console.log('wow') })()
fonte
() => {}
como um argumento para o que quer que seja retornado porrequire( ... )
. Terrível!puppeteer
lá e quase pedi um problema até que encontrei um aqui. Ufa ... nunca pensei que isso;
fosse me incomodar tanto.;(() => {})()
Para mim, esse era um problema com dependências cíclicas.
IOW, módulo A requer módulo B e módulo B requer módulo A.
Portanto, no módulo B,
require('./A')
é um objeto vazio em vez de uma função.Como lidar com dependências cíclicas em Node.js
fonte
Para mim, recebi um erro semelhante ao alternar entre os branches - uma versão mais recente ("typescriptish") usada de
@google-cloud/datastore
pacotes que retorna o objeto com o construtor Datastore como uma das propriedades do objeto exportado e eu mudei para outro branch para uma tarefa, uma versão mais antiga do armazenamento de dados foi usado lá, que exporta o construtor do Datastore "diretamente" comomodule.exports
valor. Recebi o erro porque node_modules ainda tinha módulos mais novos usados pela filial de onde troquei.fonte
Eu também enfrentei algo assim. em seu arquivo de rotas, exporte a função como um objeto como este:
module.exports = { hbd: handlebar }
e em seu arquivo de aplicativo, você pode ter acesso à função por .hbd e não há problema ....!
fonte
Lembre-se de exportar o seu
routes.js
.Em
routes.js
, escreva suas rotas e todo o seu código neste módulo de função:exports = function(app, passport) { /* write here your code */ }
fonte
Basta envolver a função de seta onde você deseja os arquivos
fonte