NodeJs: TypeError: आवश्यकता (…) एक फ़ंक्शन नहीं है


86

मैं एक फ़ाइल की आवश्यकता के लिए कोशिश कर रहा हूं और बाद में इसे एक var में पास करूंगा। प्रमाणीकरण प्रणाली बनाने के लिए मैं इस ट्यूटोरियल का अनुसरण कर रहा हूं । Server.js फ़ाइल को लिखने और संकलन करने की कोशिश करने के बाद मुझे एक त्रुटि मिली है इसलिए मैंने उस पंक्ति को बदल दिया है जिसके लिए मानगो में रिलीज़ संस्करण आवश्यक है।

यहाँ मेरा कोड और त्रुटि है:

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

मैंने पढ़ा है कि इसका आमतौर पर मतलब होता है कि आवश्यकता जेजेएस को ठीक से लोड नहीं हो रहा है फिर भी मुझे पता नहीं है कि इसे क्यों या कैसे ठीक करना है।

टिप्पणी के कारण संपादित करें:

जैसा पूछा गया, यहाँ का परिणाम हैconsole.log(require);


क्या आप console.log(require)असफल होने वाली रेखा से पहले कर सकते हैं ? आपको सर्वर साइड पर आवश्यकताजेएसएस की आवश्यकता नहीं होनी चाहिए, नोड.जेएस में एक मॉड्यूल सिस्टम बनाया गया है (कॉमनजेएस, requireफ़ंक्शन का उपयोग भी करता है)। लगता है कि ग्लोबल requireवैरिएबल कुछ बदल रहा है ।
kraf

जवाबों:


107

मुझे लगता है कि इसका मतलब है कि 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) { ... }
मैग्नी

@Magne - लेकिन ओपी कोशिश कर रहा है require('./app/routes')(app, passport);जो निर्यात दिखाने के तरीके से काम नहीं करेगा।
20

सच, मेरा बुरा। मेरा उपयोग का मामला थोड़ा अलग था। मैं एक नामित समारोह का निर्यात करना चाहता था।
मैग्ने

61

मेरे लिए, जब मैं तुरंत कार्य करता हूं, तो मुझे ;अंत में डालने की आवश्यकता है require()

त्रुटि:

const fs = require('fs')

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

अच्छा:

const fs = require('fs');

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

7
यह मेरी समस्या भी थी! समस्या वास्तव में यह है कि रनटाइम इस मामले में व्हाट्सएप को नजरअंदाज करता है, और ऐसा लगता है कि आप अपने फ़ंक्शन बॉडी () => {}को एक तर्क के रूप में पारित कर रहे हैं जो कुछ भी वापस आ गया है require( ... )। भयानक!
विल ब्रिकनर

हाँ, 'जेएस' बहस में अर्धविराम के पक्ष में यह एक अच्छा तर्क है। सौभाग्य से, अर्धविरामों की अनुपस्थिति केवल IIFE के संदर्भ में समस्या प्रतीत होती है, जो फैशन से बाहर हो रही हैं
JP Lew

1
हे भगवान!! मैं वहाँ से आया puppeteerऔर लगभग एक मुद्दे का अनुरोध किया जब तक कि मुझे यहाँ एक नहीं मिला। काहे ... कभी नहीं सोचा था कि ;मुझे इतना परेशान करेगा।
इरफैंडी जिप

1
महान समाधान! ध्यान दें कि आपको वास्तव में प्रत्येक आत्म-आहरण समारोह से पहले अर्धविराम लगाना चाहिए। मैंने इस निर्माण को अनुकूलित किया:;(() => {})()
दिमित्री

यदि लाइब्रेरी के भीतर कोड हो तो क्या विकल्प हैं? मेरे पास एक नोड_मॉड्यूल्स लाइब्रेरी (नोड-मेलजेट) है जो अर्धविराम का उपयोग नहीं करता है। मैं स्थानीय रूप से वेबपैक के साथ निर्माण कर सकता हूं, लेकिन जब मैं डोकर पर निर्माण करता हूं तो यह त्रुटि मिलती है :(
जेवियर गुज्मैन

12

मेरे लिए, यह चक्रीय निर्भरता के साथ एक मुद्दा था।

IOW, मॉड्यूल A आवश्यक मॉड्यूल B, और मॉड्यूल B आवश्यक मॉड्यूल A।

इसलिए मॉड्यूल बी में, require('./A')फ़ंक्शन के बजाय एक खाली ऑब्जेक्ट है।

Node.js में चक्रीय निर्भरता से कैसे निपटें


0

मेरे लिए, मुझे शाखाओं के बीच स्विच करने पर इसी तरह की त्रुटि मिली - एक @google-cloud/datastoreपैकेज के नए ("टाइपस्क्रिप्ट") संस्करण का उपयोग किया गया, जो डेटास्टोर निर्माता के साथ ऑब्जेक्ट को निर्यात की गई वस्तु के गुणों में से एक के रूप में लौटाता है और मैं एक कार्य के लिए दूसरी शाखा में स्विच करता हूं, एक पुराना डेटास्टोर संस्करण वहाँ इस्तेमाल किया गया था, जो कि module.exportsमूल्य के रूप में "सीधे" डाटस्टोर निर्माणकर्ता को निर्यात करता है । मुझे त्रुटि मिली क्योंकि नोड_मॉड्यूल्स में अभी भी शाखा द्वारा उपयोग किए गए नए मॉड्यूल थे जिनसे मैंने स्विच किया था।


0

मैंने भी कुछ इस तरह का सामना किया है। अपने रूट फाइल में, फंक्शन को ऑब्जेक्ट की तरह निर्यात करें:

 module.exports = {
     hbd: handlebar
 }

और अपने ऐप फ़ाइल में, आप .hbd द्वारा फ़ंक्शन तक पहुँच सकते हैं और कोई ptoblem नहीं है ....!


-1

निर्यात करने के लिए याद रखें routes.js

में routes.js, अपने मार्गों और इस समारोह मॉड्यूल में अपने सभी कोड लिखने:

exports = function(app, passport) {

/* write here your code */ 

}

-1

बस एरो फ़ंक्शन में लपेटें जहां आपको फ़ाइलों की आवश्यकता होती है


5
अच्छा होगा यदि आप हमें कुछ कोड दिखाएंगे कि आपने क्या कहा
U10- फॉरवर्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.