繁体   English   中英

试图了解html GET和res.redirect如何在express中工作

[英]trying to understand how html GET and res.redirect works in express

我是nodejs express等人的新手。我试图了解为什么res.redirect需要GET才能工作。而res.render却不需要。 这是场景。 到目前为止,我有一个使用护照进行身份验证的登录名。 身份验证后,取决于用户的类型...。用户将被发送到特定的html页面。 如果我只是重新渲染页面,它就可以正常工作....但是,如果我重新重定向到页面,则会收到“无法获取...”错误,表明我没有get('/ page')块。 这是一个示例代码:

// get part request page
  router.get('/partpage', function(req,res) {
  res.render('partpage', {name: user.get("Name"),email:user.get("Email")});

});
// get dealer page
  router.get('/dealers', function(req,res) {
  res.render('dealers', {name: user.get("Name"),email:user.get("Email")});

});

.
.
.
router.post('/login',
 passport.authenticate( 'local',
    {sucessRedirect:'/',
     failureRedirect:'/users/login',
     failureFlash:true}),
 function(req,res)
 {
.
.
.

// After passport authentication.....

 if (user.get("Category")==="dealer")
     {
       res.redirect('/users/dealers?name='+username+'&email='+useremail);
     }
  else
     {
      res.redirect('/users/partpage?name='+username+'&email='+useremail);
     }

如果删除任何一个GET,我都会收到并报错(“无法获取...”)。 我不明白为什么会这样。 更重要的是,我正在将参数传递给页面...哪一个优先? ...显然这里有问题! 谁能为我解释一下? 正确的方法是什么?

主页路由设置如下:

在app.js中

.
.
.
var routes = require('./routes/index');
.
.
.
app.set('views', path.join(__dirname,'views'));
app.set('view options', { layout:'layout.ejs' });
app.set('view engine','ejs');
.
.
.
app.use('/', routes);

res.redirect就像Web服务器接受requrest之后的东西一样,它在表后面迫使浏览器更改url,这意味着302 http代码。 当res.render是Web服务器时,仅使用jade或ejs来渲染页面,这意味着200个http代码。

对于您而言,在用户访问/login?Category=dealer ,他/她的浏览器将是/users/dealers?name=a&email=b 302。 然后,您的服务器需要路由器router.get('/dealers', fn)来显示页面。 最重要的是,用户的浏览器网址将是/users/dealers?name=a&email=b

如果您直接在身份验证回调中使用res.render ,则用户的浏览器将显示渲染的页面,但url仍然是/login?Category=dealer

建议在您的情况下使用重定向。 否则,如果用户按“ F5”刷新页面,则他/她实际上是刷新URL /login?Category=dealer ,这将不必要地触发您的身份验证路由器和逻辑。


更新:

渲染和重定向的区别,(抱歉,我回复晚,由于长城,这些天我无法访问stackoverflow)

1个

用户的浏览器向您的服务器发出http请求===>

您的服务器获取请求,并使用res.render输出响应,这意味着您的服务器在响应标头中返回“ http status 200”,在响应正文中返回“ html” ==>

用户的浏览器收到“ 200 and html”响应,然后解析“ html”进行查看。

2

用户的浏览器向您的服务器发出http请求===>

您的服务器获取请求,并使用res.redirect,这意味着您的服务器在响应标头中返回了“ http状态302和新url”,但未返回任何响应。==>

用户的浏览器收到“ 302和新的url”响应,然后重新定位到新的url,这意味着用户的浏览器再次使用此新的url ius http请求==>

您的服务器获取请求,并使用res.render输出响应,这意味着您的服务器在响应标头中返回“ http status 200”,在响应正文中返回“ html” ==>

用户的浏览器收到“ 200 and html”响应,然后解析“ html”进行查看。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM