2016-08-07 13 views
5

मैं एक और 'POST' अनुरोध करने के लिए एक URL अनुरोध से रीडायरेक्ट करना चाहते हैं पुनर्निर्देशित करने के लिए, इस तरह:
एक्सप्रेस के साथ Node.js: कैसे एक पोस्ट अनुरोध

var app = require('express')(); 
 

 
app.get('/', function(req, res) { 
 
    res.redirect('/test'); 
 
}); 
 

 
app.post('/test', function(req, res) { 
 
    res.send('/test page'); 
 
}); 
 

 
app.listen(3000, function() { 
 
    console.log('listenning on port:3000'); 
 
});

हालांकि, मैं '/ test' पृष्ठ पर रीडायरेक्ट नहीं कर सकता क्योंकि यह एक POST अनुरोध है।
तो '/ test' अनुरोध POST रखते हुए, पुनर्निर्देशन कार्य करने के लिए मुझे क्या करना चाहिए?

+0

मैं शब्द 'पृष्ठ' से थोड़ा उलझन में हैं क्या आप 1 एंडपॉइंट से दूसरे पर रीडायरेक्ट करना चाहते हैं? उदाहरण '/' {GET} अनुरोध {/ test' {POST} –

+0

भ्रम के लिए खेद है। मेरा मतलब है 'लोकलहोस्ट: 3000 /' से 'लोकलहोस्ट: 3000/टेस्ट' – neolicd

उत्तर

14

आप ऐसा कर सकते हैं:

app.post('/', function(req, res) { 
    res.redirect(307, '/test'); 
}); 

कौन सा भेजने विधि सुरक्षित करेगा।

संदर्भ के लिए, 307 http कोड कल्पना है:

307 अस्थायी पुनर्निर्देशन (के बाद से HTTP/1.1) इस अवसर में, अनुरोध एक और यूआरआई के साथ दोहराया जाना चाहिए, लेकिन भविष्य के अनुरोधों अभी भी उपयोग कर सकते हैं मूल URI.2 303 के विपरीत, मूल अनुरोध को पुन: जारी करते समय अनुरोध विधि नहीं बदला जाना चाहिए। उदाहरण के लिए, एक पोस्ट अनुरोध किसी अन्य POST अनुरोध का उपयोग करके दोहराया जाना चाहिए।

अधिक जानकारी के लिए, देखें: http://www.alanflavell.org.uk/www/post-redirect.html

+0

पर रीडायरेक्ट कर रहा है। इसलिए अगर मैं app.get ('/') का उपयोग करता हूं, तो मैं app.post ('/ test') पर रीडायरेक्ट नहीं कर सकता, है ना? – neolicd

+0

मानक http रीडायरेक्ट के साथ नहीं, आपको किसी प्रकार की प्रॉक्सी सेट अप करने की आवश्यकता होगी। – ldg

+1

यह समाधान अन्य ब्राउज़र अनुरोध को मजबूर करता है। सर्वर ब्राउज़र को निर्देश देता है, ब्राउज़र फिर एक और अनुरोध करता है। यह एक चौराहे विधि है। वैसे भी मैं अनुरोध करने के लिए ब्राउजर के सभी तरह से जाने से बचने के लिए सीधे एक्सप्रेस के भीतर रीडायरेक्ट कर सकता हूं? – Koder

0

ध्यान रखें मिडलवेयर वास्तुकला: प्रत्येक हैंडलर संदर्भ में हेरफेर कर सकते हैं और या तो जवाब - या - फोन next()

इस आधार पर, एक्सप्रेस राउटर मूल रूप से एक मिडलवेयर फ़ंक्शन है जिसका उपयोग आप यूआरएल को "ठीक करने" के बाद कर सकते हैं।

यहाँ एक kind'a उदाहरण है (btw, अनुरोध एप्लिकेशन भी एक समारोह है, हालांकि मुझे यकीन है कि नहीं कर रहा हूँ अगर मैं इतना श्रृंखला के शुरू में वापस जा रहा की सिफारिश है):

const router = new require('express').Router() 
const user = require('../model/user') 
//assume user implements: 
// user.byId(id) -> Promise<user> 
// user.byMail(email) -> Promise<user> 

const reqUser = userPromise => (req, res, next) => 
    req.user 
    ? next() 
    : userPromise(req) 
     .then(user => { req.user = user }) 
     .then(next, next) 
//assume the sever that uses this router has a 
//standard (err, req, res, next) handler in the end of the chain... 

const byId = reqUser(req => user.byId(req.params.id)) 
const byMail = reqUser(req => user.byMail(req.params.mail)) 

router.post('/by-id/:id/friends', 
    byId, 
    (req, res) => res.render('user-friends', req.user) 
) 

router.post('/by-email/:email/friends', 
    byMail, 
    (req, res, next) => { 
    req.url = `/by-id/${req.user.id}/friends` 
    next() 
    }, 
    router 
) 
संबंधित मुद्दे