2015-09-16 11 views
13

में राउटर प्राथमिकता का आदेश मैं express.js में ऑर्डर प्राथमिकता को समझना चाहता हूं। उदाहरण के लिए, bellow कोडexpress.js

var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var api = require('./routes/api'); 


app.use('/api', api); 
app.use('/users', users); 

app.use('/:name', function(req, res, next) {  
    console.log('from app.js name:', req.params.name); 

    res.render('index', { 
     title: req.params.name 
    }); 
}, routes); 

app.use('/', function(req, res, next) { 
    res.render('index', { 
     title: 'MainPage' 
    }); 
}); 

एक अनुरोध ग्राहक स्थानीय होस्ट से आते हैं, तो के रूप में: 3000/api/abc और स्थानीय होस्ट: 3000/उपयोगकर्ता/एबीसी, एपीआई और उपयोगकर्ता मॉड्यूल से प्रतिक्रिया। लेकिन अगर मैं स्थानीयहोस्ट जैसे अनुरोध करता हूं: 3000/myName/xyz, ऐप मॉड्यूल एक प्रतिक्रिया देता है। इस व्यवहार से मुझे चिंता है कि एक्सप्रेसज की प्राथमिकता क्या है और राउटर मॉड्यूल के लिए सही क्रम क्या है। राउटर "एपीआई", "उपयोगकर्ता" और पैरामीटर "नाम" के बीच क्यों भ्रमित नहीं होते हैं। कृपया मुझे स्पष्ट रूप से समझने दें कि एक्सप्रेस कैसे करता है और प्राथमिकता क्या है।

उत्तर

10

ऑर्डर पहले सबसे पहले आते हैं।

आपके मामले में, यदि उपयोगकर्ता हिट/एपीआई, वह एपीआई से प्रतिक्रिया मिल जाएगा, लेकिन अगर आप /api से पहले /:name मार्ग लिखते हैं, /:name भी /api अनुरोधों के लिए काम करेगा।

Case1: /api/api के लिए अनुरोध कर सकता।

var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var api = require('./routes/api'); 


app.use('/api', api); 
app.use('/users', users); 

app.use('/:name', function(req, res, next) {  
    console.log('from app.js name:', req.params.name); 

    res.render('index', { 
     title: req.params.name 
    }); 
}, routes); 

app.use('/', function(req, res, next) { 
    res.render('index', { 
     title: 'MainPage' 
    }); 
}); 

Case2: /:name/api और /users

var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var api = require('./routes/api'); 

app.use('/:name', function(req, res, next) {  
    console.log('from app.js name:', req.params.name); 

    res.render('index', { 
     title: req.params.name 
    }); 
}, routes); 

app.use('/api', api); 
app.use('/users', users); 



app.use('/', function(req, res, next) { 
    res.render('index', { 
     title: 'MainPage' 
    }); 
}); 
+1

धन्यवाद बहुत ज्यादा @Laxmikant डांगे के लिए अनुरोध में कार्य करता है लेकिन अगर मैं में एपीआई मॉड्यूल या उन मॉड्यूल कुछ भी नहीं, क्यों app.use ("/", func() {}) सर्वर के रूप में कार्य करता है ...? यह मुख्य पृष्ठ का जवाब देता है .. ?? – hoanganh17b

+2

एक्सप्रेसजेएस दस्तावेज में, क्या मुझे उपयोग() के प्राथमिकता नियमों के बारे में जानकारी मिल सकती है और() मार्ग प्राप्त हो सकते हैं। –

+1

@hoan क्योंकि कोई 'नाम' नहीं है, इसलिए यह '/: name' से मेल नहीं खाता है –

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