javascript - Nodejs 在 ajax 调用中表达 res.render

标签 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 请求在 header 中发送 token ,然后在我的 route ,我有一个身份验证中间件,它获取 token ,然后将用户重定向到 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'));
       });
    });

最佳答案

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

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

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

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

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

关于javascript - Nodejs 在 ajax 调用中表达 res.render,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50740067/

相关文章:

javascript - javascript 缩小文件上的正则表达式最小匹配

node.js - 获取 morgan 组合格式字符串

javascript - 我如何通过await访问解析数组中的2个元素

javascript - 注意数组到字符串的转换

javascript - 正则表达式 Javascript 替换

javascript - Relay.js 无法正确解析组合片段

javascript - 如何仅在用户登陆页面时运行脚本

node.js - 为什么我不能使用导入语法从 TypeScript 导入 CoffeeScript 文件

javascript - 使用 javascript 确定数组提交按钮,然后使用 Ajax 输出数据

javascript - 是否可以从书签进行 ajax 调用?