nodejs在ajax调用中表达res.render

时间:2018-06-07 11:29:00

标签: javascript node.js ajax express render

我在expressjs中遇到了res.render()的问题 我使用ajax来请求这条路线:

route.get('/about',authentication,(req,res)=>{
    res.render('about');
});

我做了一些搜索,发现res.render不适用于ajax调用 那么如何在没有res.render()的情况下更改和呈现页面。

如果我删除了res.renderconsole.log,它实际上可以使用任何代码而不是res.render(通过点击链接,我在带有ajax请求的标头中发送令牌然后在我的route我有一个认证中间件,它获取令牌,然后将用户重定向到about.ejs页面)

我只想更改页面。任何想法都会帮助你们。 谢谢 这是前端请求:

$(document).ready(function(){
       $('#about').click(function(){
         // window.location.href='/about';
           $.ajax({
              method:'get',
              url:'http://localhost:5000/about',
              headers:{"authtoken":localStorage.getItem('authToken')}
           }).done(()=>{
               // window.location.href='/about';
           }).catch(e=>console.log('header.ejs error'));
       });
    });

4 个答案:

答案 0 :(得分:1)

步骤1:制作公开网址,例如http://your-web-site.com/redirect_destination.html

步骤2:在从前端发出ajax请求时,使用response上的.redirect()方法将用户重定向到该页面

修改

关键是,我认为通过发出ajax请求来呈现页面是不可能的。您可以使用.redirect()方法准备一个呈现所需网页的网址,并将用户重定向到该网址。

答案 1 :(得分:0)

通常ajax用于在没有刷新页面的情况下使用来自服务器的某些resposne来更新页面的一部分。如果您想导航到另一条路线而不是ajax,请使用表单提交或href。如果你坚持使用ajax然后从服务器返回一个JSON并使用javascript进行更改

requestHandler=(req,res)=>{
 res.json({data:{}})
}

答案 2 :(得分:0)

你的路由器不会呈现页面,它只会发送响应而我只是为了页面呈现,为什么你在点击事件上调用ajax请求。如果你不介意你可以写点击和更改window.location与你的逻辑路由器。它将呈现特定页面,因为您的路由器应该是这样的:

    // about page route (http://localhost:8080/about)
    router.get('/about',isAuthenticated, function(req, res) {
        res.sendFile(path.join(__dirname+'/public/about.html'));
    }); 

   function isAuthenticated(req, res, next) {
  // do any checks you want to in here

  // CHECK THE USER STORED IN SESSION FOR A CUSTOM VARIABLE
  // you can do this however you want with whatever variables you set up
  if (req.user.authenticated)
      return next();

  // IF A USER ISN'T LOGGED IN, THEN REDIRECT THEM SOMEWHERE
  res.redirect('/');
 }

点击更改您的网址http://localhost:8080/about

答案 3 :(得分:0)

res.render使用模板组成一个html页面,并将最终的组合结果从服务器发送到客户端。它不会在客户端窗口中发布页面呈现。

如果通过在浏览器的地址栏中输入URL来发出请求,则浏览器将执行请求并呈现服务器发送的结果。

如果您执行ajax请求,您将收到该响应,但您有责任在.done回调中对其执行某些操作。如果您执行ajax请求,浏览器不会神奇地知道要对数据执行什么操作。而且因为你的.done回调中没有任何内容,所以不会发生任何事情。

所以你必须做那样的事情:

.done(response => {
    var bodyContent = response.match(/<body>(.*)<\/body>/)[1]
  $('body').html(bodyContent);
})