2012-04-03 10 views
11

के लिए काम कर रहे हैं मेरे पास एक्सप्रेसजे के लिए अलग फ़ोल्डर में मार्ग हैं। सेटअप 'इंडेक्स' पृष्ठ के लिए ठीक काम कर रहा है, लेकिन किसी भी अतिरिक्त मार्ग के लिए नहीं।नोडजेस एक्सप्रेसजेएस मार्ग केवल सूचकांक

यह मेरे index.js है, मेरे मार्ग फ़ोल्डर के अंदर।

module.exports = function(db) { 

    return { 
     index: function(req, res, next) { 
      res.send('index'); 
     } 
    } 
} 

यह मेरे मार्ग फ़ोल्डर के अंदर मेरा join.js है।

module.exports = function(db) { 

    return { 
     join: function(req, res, next) { 
      res.send('join'); 
     } 
    } 
} 

मेरी app.js में, मैं इस तरह मेरे मार्गों को परिभाषित:

  var routes = require('./routes')(db); 
      app.get('/', routes.index); 
      app.get('/join', routes.join); 

जब मैं http://localhost:3000 करने के लिए जाना है लेकिन मैं Cannot GET /join

मिलता है जब मैं http://localhost:3000/join करने के लिए जाना अगर मैं अपने मार्ग को परिभाषित इस तरह शामिल होने के लिए:

app.get('/join', function(req, res){ 
    res.send('join 2'); 
}); 

यह काम करता है।

कोई विचार क्या मैं यहां गलत कर रहा हूं?

धन्यवाद!

उत्तर

0

मैंने एक समान परिदृश्य का परीक्षण किया और यह मेरे लिए काम किया।

मुझे लगता है कि गलती शायद आपके मार्ग.जेएस फ़ाइल में है। आप की संभावना कर रहे हैं:

routes.index = require('./index')(db); 
routes.join = require('./join')(db); 

शायद तुम join के लिए विधि कॉल करने के लिए, बस require(./join) कर भूल जाते हैं। बस एक अनुमान है।

6

मुझे एक ही समस्या थी, लेकिन फिर याद किया कि यह सब "सिर्फ जावास्क्रिप्ट" है और एक जवाब को हल करने में सक्षम था।

यदि आप चाहते हैं अपने मार्गों तुम सिर्फ निर्माण कर सकते हैं मार्गों एक hackish तरह से वस्तु (इस प्रकार) (बजाय उन सब को एक मार्गों/index.js फ़ाइल में cramming की) एक से अधिक फ़ाइलों में परिभाषित किया गया है करने के लिए:

var express = require('express') 
    , routes = { 
     index: require('./routes').index 
    , events: require('./routes/events.js').events 
    } 
    , hbs = require('hbs'); 

नोट: आप को एक्सप्रेस और एचबीएस परिभाषाओं (पहली और आखिरी पंक्तियों) की आवश्यकता नहीं है, मैंने इसे थोड़ा संदर्भ देने के लिए वहां रखा है। यह कोड स्निपेट सीधे मेरी app.js फ़ाइल के शीर्ष से आया था।

.index और .events पर ध्यान दें require() फ़ंक्शन कॉल पर जंजीर। यही कुंजी है। मेरे events.js फ़ाइल केवल एक ही निर्यात (घटनाओं) है:

exports.events = function(req, res){ 
    console.log('in events'); 
    res.render('events', { events: events, title: "EVENTS" }); 
    console.log('events done'); 
}; 

require() समारोह अनिवार्य रूप से एक फ़ाइल पकड़ लेता है और (आयात) किसी भी गैर-निजी वार्स (जो है, विशेष exports वस्तु से जुड़ी उन) की आवश्यकता है के बाद से और require() कॉल वाली फ़ाइल में उन्हें उजागर करता है, मैं उस फ़ाइल से आवश्यक विशिष्ट फ़ंक्शन को पकड़ने में सक्षम हूं जिसमें मैं require() कॉल के साथ शामिल हूं।मैं कई निर्यात के लिए आवश्यक फाइल में परिभाषित किया था, तो मैं कल्पना तो की तरह (परीक्षण नहीं किया) मैं उन्हें हड़पने सकता है:

routes = { 
    index: require('./routes').index 
    , events: require('./routes/events.js').events 
    , favorites: require('./routes/events.js').favorites 
    , upcoming: require('./routes/events.js').upcoming 
} 

मुझे लगता है कि इस NodeJS या MVC का एक समूह के साथ किसी देना होगा धमनीविस्फार अगर अनुभव वे आपका कोड पढ़ते हैं (मैं शर्त लगा रहा हूं कि इसमें एक ही फाइल 3 बार शामिल होगी, लेकिन मुझे सच में यकीन नहीं है)। शायद बेहतर करने के लिए:

routes = { 
    index: require('./routes').index 
    , events: require('./routes/events.js').events 
    , favorites: require('./routes/favorites.js').favorites 
    , upcoming: require('./routes/upcoming.js').upcoming 
} 

अन्यथा, उन्हें केवल इंडेक्स में क्यों नहीं फेंक दें? वास्तव में सुनिश्चित नहीं हैं, हालांकि, यह केवल मेरी दूसरी नोड और इससे संबंधित तकनीकों में से किसी के साथ काम करने का दिन है ...

इसके अलावा शायद आपकी मदद करेगा अगर आप अपने वर घोषणाओं के बाद एक console.log बयान फेंक:

console.log(routes); 
+0

+1 "लेकिन फिर याद किया कि यह सब" सिर्फ जावास्क्रिप्ट "है और एक जवाब को हल करने में सक्षम था।" !! शानदार जवाब :) –

+0

"पहली बार लोड होने के बाद मॉड्यूल कैश किए जाते हैं" http://nodejs.org/api/modules.html#modules_caching –

3

कारण मार्ग/index.js फ़ाइल काम करता है और आपके मार्ग/join.js नोड के मॉड्यूल लोडिंग नियमों के कारण नहीं है। modules/folders as modules

के लिए दस्तावेज़ देखें, यह कहता है कि यह इन फ़ाइलों को क्रम में लोड करने का प्रयास करेगा। package.json, index.js, index.node

आप निर्देशिका में पैकेज.जेसन फ़ाइल बनाकर लोड की गई फ़ाइल को बदल सकते हैं। नई फ़ाइल के नाम पर main संपत्ति सेट करें।

मार्गों को बनाने के तरीके का एक उदाहरण another question पर है।

0

अगर आप सिर्फ इतना कहना

var routes = require('./routes') 

डिफ़ॉल्ट रूप से, नोड इंडेक्स फ़ाइल की तलाश शुरू कर देंगे (चाहे वह index.js या index.node है)। यदि आप अपनी जॉइन फ़ाइल का उपयोग करना चाहते हैं, तो आपको इसे स्पष्ट रूप से कहना होगा:

var join = require('./routes/join') 

अब मुझे लगता है कि join.join को काम करना चाहिए।

0

इसी तरह की समस्या थी।

केवल मेरा "/" मार्ग काम करता था। "/ about" बनाने की कोशिश करते समय मुझे 404 त्रुटि मिल जाएगी।

बाहर बदल जाता है जब मैं एक्सप्रेस-जनरेटर लिखा था इस्तेमाल किया:

app.use('/about', ...etc) 

इसके बजाय यह किया जाना चाहिए था:

app.all('/about', ...etc) 

मैं अपनी नहीं ठीक उसी समस्या पता लेकिन इस strays के लिए है, जो अपने आप को "केवल इंडेक्स काम करता है ..." समस्या के लिए एक ही प्रश्न की तलाश में ढूंढें।

संबंधित मुद्दे