Node.js和Express res.render()什么都不做?

时间:2018-09-17 14:56:14

标签: jquery node.js ajax mongodb express

我已经查看了所有相关文章,并花了很长时间来搜索该文章,但尚未找到解决方案。我正在尝试呈现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})。它似乎无能为力。如果我手动输入路径,则可以使用,但是单击按钮后似乎无法使用。我想我可能在这里缺少关键概念。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

在您的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');


  }})