Próbuję zażądać pliku, a następnie przekazać go do var. Postępuję zgodnie z tym samouczkiem, aby utworzyć system uwierzytelniania. Po zapisaniu pliku server.js i próbie kompilacji pojawił się błąd bson, dlatego zmieniłem wiersz, który wymagał wydania wersji tego pliku w mongoose.
Oto mój kod i błąd:
server.js
require('./app/routes')(app, passport);
Błąd
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
Czytałem, że zwykle oznacza to, że requireJS nie ładuje się poprawnie, ale nie wiem, dlaczego i jak to naprawić.
Edytuj w związku z komentarzem:
Zgodnie z pytaniem, oto wynikconsole.log(require);
javascript
node.js
require
taigi100
źródło
źródło
console.log(require)
przed linią, która zawodzi? Nie powinieneś potrzebować requireJS po stronie serwera, node.js ma wbudowany system modułów (CommonJS, również używarequire
funkcji). Wydaje się, że coś zmieniarequire
zmienną globalną .Odpowiedzi:
Myślę, że oznacza to, że
module.exports
twój./app/routes
moduł nie jest przypisany do funkcji, więcrequire('./app/routes')
nie rozwiązuje się do funkcji, więc nie możesz go nazwać taką funkcjąrequire('./app/routes')(app, passport)
.Pokaż nam,
./app/routes
jeśli chcesz, abyśmy skomentowali to dalej.Powinien wyglądać mniej więcej tak;
module.exports = function(app, passport) { // code here }
Eksportujesz funkcję, którą można nazwać jak
require('./app/routes')(app, passport)
.Jednym z innych powodów może wystąpić błąd jest podobny, jeśli masz okrągłą zależność modułu moduł A gdzie próbuje
require(B)
i moduł B próbujerequire(A)
. Kiedy to się stanie, zostanie to wykryte przezrequire()
podsystem i jeden z nich wróci jako,null
a zatem próba wywołania tego jako funkcja nie zadziała. Rozwiązaniem w tym przypadku jest usunięcie zależności cyklicznej, zwykle przez rozbicie wspólnego kodu na trzeci moduł, który oba mogą oddzielnie ładować, chociaż specyfika ustalania zależności cyklicznej jest unikalna dla każdej sytuacji.źródło
module.exports.functionName = function functionName(app, passport) { ... }
require('./app/routes')(app, passport);
co nie zadziała tak, jak pokazujesz eksport.Dla mnie, gdy robię natychmiast wywołaną funkcję, muszę umieścić
;
na końcurequire()
.Błąd:
const fs = require('fs') (() => { console.log('wow') })()
Dobry:
const fs = require('fs'); (() => { console.log('wow') })()
źródło
() => {}
jako argument do tego, co jest zwracane przezrequire( ... )
. Straszny!puppeteer
i prawie poprosiłem o problem, dopóki go nie znalazłem. Uff ... nigdy nie sądziłem, że;
to mnie tak niepokoi.;(() => {})()
Dla mnie był to problem z cyklicznymi zależnościami.
IOW, moduł A wymagany moduł B i moduł B wymagany moduł A.
Więc w module B
require('./A')
jest to raczej pusty obiekt niż funkcja.Jak radzić sobie z cyklicznymi zależnościami w Node.js.
źródło
U mnie wystąpił podobny błąd podczas przełączania między gałęziami - jedna używana nowsza ("maszynopisowa") wersja
@google-cloud/datastore
pakietów zwraca obiekt z konstruktorem Datastore jako jedną z właściwości eksportowanego obiektu i przełączyłem się na inną gałąź dla zadania, starszą wersję datastore został tam użyty, który eksportuje konstruktor Datastore „bezpośrednio” jakomodule.exports
wartość. Otrzymałem błąd, ponieważ node_modules nadal miały nowsze moduły używane przez gałąź, z której się przełączyłem.źródło
Ja też miałem do czynienia z czymś takim. w pliku tras wyeksportuj funkcję jako obiekt w następujący sposób:
module.exports = { hbd: handlebar }
aw pliku aplikacji możesz mieć dostęp do funkcji przez .hbd i nie ma żadnego problemu ....!
źródło
Pamiętaj, aby wyeksportować
routes.js
.W programie
routes.js
napisz swoje trasy i cały kod w tym module funkcji:exports = function(app, passport) { /* write here your code */ }
źródło
Po prostu zawiń funkcję Arrow tam, gdzie potrzebujesz plików
źródło