2016-08-07 3 views
5

POSTリクエストをリダイレクトします
ExpressでのNode.js:どのようにこのように、私は別の 'POST' リクエストに1つのURL要求からリダイレクトしたい

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'); 
 
});

をしかし、私は、それはPOSTリクエストであるため、 '/ test'ページにリダイレクトできません。
それで、リダイレクトを動作させるために何をすればよいのですか? '/ test'リクエストPOSTを維持しますか?

+0

「ページ」という用語で混乱していますが、1つのエンドポイントから別のエンドポイントにリダイレクトすることを検討していますか?例 '/' {GET}が '/ test' {POST}にリクエストしました –

+0

ごめんなさい。私は、 'localhost:3000 /'から 'localhost:3000/test'にリダイレクトしていることを意味します。 – neolicd

答えて

14

あなたはこれを行うことができます:sendメソッドを保持します

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

を。

参考のため、307 HTTPコードの仕様は次のとおりです。

307一時的なリダイレクト(HTTP/1.1以降)この機会にし、要求 は別のURIを繰り返さなければならないが、将来の要求はまだ を使用することができます元のURI.2 303とは対照的に、元の要求を再発行するときには、要求方法を に変更しないでください。たとえば、POST 要求は、別のPOST要求を使用して繰り返さなければなりません。詳細情報については

、以下を参照してくださいhttp://www.alanflavell.org.uk/www/post-redirect.html

+0

が見つかりました。だから、app.get( '/')を使用している場合、app.post( '/ test')にリダイレクトできません。 – neolicd

+0

標準のhttpリダイレクトでは、何らかの種類のプロキシを設定する必要があります。 – ldg

+1

このソリューションは、別のブラウザ要求を強制します。サーバーはブラウザーに指示し、ブラウザーは別の要求を行います。これはラウンドアバウト方式です。とにかく私は直接Express内でリクエストをするためにブラウザに行く必要がないようにリダイレクトできますか? – Koder

0

は心の中でミドルウェア・アーキテクチャを維持:各ハンドラは、コンテキストを操作して、いずれかの応答することができる - または - next()を呼び出します。

この前提では、エクスプレスルータは基本的にURLを「訂正」した後に使用できるミドルウェア機能です。

(私はそんなに早くチェーンに戻ってお勧めかはわからないが、ところで、要求アプリは、また機能である)

ここkind'a例です:私は

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 
) 
関連する問題