neo*_*icd 21 redirect node.js express
我想从一个URL请求重定向到另一个'POST'请求,如下所示:
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');
});Run Code Online (Sandbox Code Playgroud)
但是,我无法重定向到'/ test'页面,因为它是一个POST请求.
那么我该怎么做才能使重定向工作,保持'/ test'请求POST?
ldg*_*ldg 35
你可以这样做:
app.post('/', function(req, res) {
res.redirect(307, '/test');
});
Run Code Online (Sandbox Code Playgroud)
这将保留send方法.
作为参考,307 http代码规范是:
307临时重定向(自HTTP/1.1起)在这种情况下,请求应该使用另一个URI重复,但将来的请求仍然可以使用原始URI.2与303相比,重新发出原始请求时不应更改请求方法.例如,必须使用另一个POST请求重复POST请求.
有关详细信息,请参阅:http://www.alanflavell.org.uk/www/post-redirect.html
请记住中间件架构:每个处理程序都可以操纵上下文,或者响应或调用next()。
在此前提下,express router 基本上是一个中间件功能,您可以在“更正” url 后使用。
(顺便说一句,请求应用程序也是一个功能,尽管我不确定我是否建议在链的早期返回)
这是一个例子:
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
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31386 次 |
| 最近记录: |