Estoy tratando de requerir un archivo y luego pasarlo a una var. Estoy siguiendo este tutorial para crear un sistema de autenticación. Después de escribir el archivo server.js e intentar compilar, obtuve un error de bson, por lo tanto, cambié la línea que requería la versión de lanzamiento en mangosta.
Aquí están mi código y error:
server.js
require('./app/routes')(app, passport);
Error
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
He leído que esto generalmente significa que requireJS no se está cargando correctamente, pero no sé por qué o cómo solucionarlo.
Editar debido al comentario:
Como se preguntó, aquí está el resultado deconsole.log(require);
javascript
node.js
require
taigi100
fuente
fuente
console.log(require)
antes de la línea que falla? No debería necesitar requireJS en el lado del servidor, node.js tiene un sistema de módulos incorporado (CommonJS, también usa larequire
función). Algo parece estar cambiando larequire
variable global .Respuestas:
Creo que esto significa que
module.exports
en su./app/routes
módulo no está asignado para ser una función, por lo tanto,require('./app/routes')
no se resuelve en una función, por lo que no puede llamarlo como una función como estarequire('./app/routes')(app, passport)
.Muéstranos
./app/routes
si quieres que comentemos más sobre eso.Debería verse algo así;
module.exports = function(app, passport) { // code here }
Está exportando una función que luego se puede llamar como
require('./app/routes')(app, passport)
.Otra razón por la que podría ocurrir un error similar es si tiene una dependencia de módulo circular donde el módulo A está intentando
require(B)
y el módulo B está intentandorequire(A)
. Cuando esto suceda, será detectado por elrequire()
subsistema y uno de ellos regresará comonull
y, por lo tanto, intentar llamarlo como una función no funcionará. La solución en ese caso es eliminar la dependencia circular, generalmente dividiendo el código común en un tercer módulo que ambos pueden cargar por separado, aunque los detalles de arreglar una dependencia circular son únicos para cada situación.fuente
module.exports.functionName = function functionName(app, passport) { ... }
require('./app/routes')(app, passport);
lo que no funcionará de la forma en que muestra la exportación.Para mí, cuando hago la función Invocada inmediatamente, necesito poner
;
al final derequire()
.Error:
const fs = require('fs') (() => { console.log('wow') })()
Bueno:
const fs = require('fs'); (() => { console.log('wow') })()
fuente
() => {}
como un argumento para lo que sea devuelto porrequire( ... )
. ¡Terrible!puppeteer
y casi solicito un problema hasta que encontré uno aquí. Uf ... nunca pensé que;
eso me molestaría tanto.;(() => {})()
Para mí, este fue un problema con las dependencias cíclicas.
IOW, el módulo A requería el módulo B y el módulo B requería el módulo A.
Entonces, en el módulo B,
require('./A')
es un objeto vacío en lugar de una función.Cómo lidiar con las dependencias cíclicas en Node.js
fuente
Para mí, obtuve un error similar cuando cambié entre ramas: una versión más nueva ("mecanografiado") de
@google-cloud/datastore
paquetes que devuelve el objeto con el constructor del almacén de datos como una de las propiedades del objeto exportado y cambié a otra rama para una tarea, una versión anterior del almacén de datos se usó allí, que exporta el constructor de Datastore "directamente" comomodule.exports
valor. Recibí el error porque node_modules todavía tenía módulos más nuevos utilizados por la rama desde la que cambié.fuente
Yo también me he enfrentado a algo así. en su archivo de rutas, exporte la función como un objeto como este:
module.exports = { hbd: handlebar }
y en su archivo de aplicación, puede tener acceso a la función por .hbd y no hay ptoblem ....!
fuente
Recuerde exportar su
routes.js
.En
routes.js
, escriba sus rutas y todo su código en este módulo de funciones:exports = function(app, passport) { /* write here your code */ }
fuente
Simplemente ajuste la función de flecha donde necesita los archivos
fuente