【问题标题】:Node.js and Express res.render() not doing anything?Node.js 和 Express res.render() 什么都不做?
【发布时间】:2019-02-21 13:02:47
【问题描述】:

我查看了所有相关的帖子并花了很长时间在谷歌上搜索,但还没有找到解决方案。我正在尝试渲染一个 ejs 模板,但是,似乎什么都没有发生。我的代码:

前端脚本:

 $('#search').click(function(){
         var query =$('#search-query').val();//get value from searchbar
         var url = '/search/' + query;
         $.ajax({
         url: url,
    type:'GET',
    success: function(data){
      console.log('success');
    },
    error: function(){
      console.log('error');


  })
}

后端:

app.get("/search/:query", function(req, res){
  var query = req.params.query;
  Note.find({course: query}, function(err, foundNotes){//search database
    if(err){
      console.log(err);
    } else {
      console.log(foundNotes);//this displays the expected results from searching the database
      res.render('search.ejs', {notes: foundNotes});//appears to do nothing
      console.log('upload');//this also gets logged
    }

  })
});

基本上,当单击按钮时,我希望它向“/search/:query”路径发出 GET 请求,并将输入中的值作为搜索查询。然后我正在搜索一个数据库,然后呈现一个显示搜索结果的 ejs 模板。

令人不安的是 res.render('search.ejs, {notes: foundNotes})。它似乎没有做任何事情。如果我手动输入路径,它可以工作,但单击按钮似乎不起作用。我想我可能在这里遗漏了一个关键概念。

任何帮助将不胜感激!

【问题讨论】:

  • 如果您想重新渲染您的模板或渲染一个新页面,您需要使用锚标记将用户发送到新路由,并将相应的查询参数附加到该锚标记。如果您希望它像单页应用程序一样运行,您需要使用res.send,然后使用您的服务器响应的数据在前端重新渲染模板。
  • 据我了解,他只想动态渲染页面的某些元素。他可以像这样在 ajax 中做到这一点。
  • @Daphoque 您无法使用res.render 响应 ajax 请求
  • Ajax 只是一种处理http请求的方式,你可以在里面返回你想要的。 Res.render 只是继续一个模板然后发送文本。当然可以了

标签: jquery node.js ajax mongodb express


【解决方案1】:

您的渲染引擎在您的 app.get 之前已正确设置?

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

您在网络检查器中看到了什么响应?

例子:

// 我的 ajax 处理程序

router.get("/a", function(req, res){ res.render("a.ejs",{a: 11})});

//我的ejs文件

<p>
<span>hello <%- a %></span>
</p>

//我在前端的ajax请求:

$.ajax({
    url: "/a",
    type:'GET',
    success: function(data){
      // in data i have : <p><span>hello 11</span></p>

      document.getElementById("mydiv").innerHTML = data;
    },
    error: function(){
      console.log('error');


  }})

【讨论】:

  • 这是因为他用res.render响应ajax请求。他必须回复res.send,然后在前端处理数据:stackoverflow.com/questions/50740067/…
  • 哦,好吧,所以 res.render() 将返回我必须在客户端处理的 html?
  • res.render 将继续您的模板并将响应作为 html 发送
  • 你可以用它做你想做的事,就像例子中的那样
  • 谢谢,您的建议让我解决了我的问题。
猜你喜欢
  • 2015-08-23
  • 2021-01-17
  • 2017-09-11
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 2020-10-15
相关资源
最近更新 更多