2016-03-04 42 views
0

现在我正在用Jade,NodeJS和MongoDB与Monk一起创建一个网站。更改后获取MongoDB集合

我想要发生的是,页面中有一个更新(在这种情况下,用户移动谷歌地图),然后使用新参数(更新后的纬度和经度)从数据库中获取集合, ,然后将该集合用于更新页面上的项目(在搜索结果显示,在新的经纬度区域的所有项目)

下面是该得到的NodeJS代码,目前只是显示在数据库中的一切

router.get('/search', function(req, res) { 
    var db = req.db; 
    var collection = db.get('items') 
    collection.find({},{},function(e,docs){ 
     res.render('searchAll', { 
      "itemlist" : docs 
     }); 
    }); 
}); 

和玉码

each item, i in itemlist 
    #{item.stuff} 

和一些JavaScript代码,当用户移动地图(并获取新的经度和纬度)时我将不会显示,因为它的工作原理而激活。

那么我该如何回顾新的经纬度数据库并重新运行那个玉代码,以显示更新的itemList?

编辑

现在我可以从数据库中的数据,并显示在页面上,但我怎么玉(或JS?)重申,在新的数据,并在显示它页?

button(onclick="httpGet('/afibo5')") 
    | Click 
p#response 

script(type='text/javascript'). 
    function httpGet(theUrl){ 
    //document.write(theUrl); 
    $.get(
     theUrl, 
     { id: "532169"}, 
     function(responseText){ 
     document.getElementById("response").innerHTML=responseText; 
     } 
    ); 
    } 
+0

谷歌搜索一切,我不知道如何解决这个问题,我通常是后端开发人员,并没有太多的JavaScript经验。我基本上想要能够按下按钮,该按钮将查询数据库并在当前页面上显示结果。 – Adamater

回答

0

绑定到单击事件做:window.location.href =;'/搜索LAT = 5 & LON = 10?

+0

但我希望它是无缝的,无需重定向或刷新页面 – Adamater

+0

使用jquery.ajax并发送获取请求到/ api/search(从我的代码示例添加额外的路线) – num8er

+1

工作,我将我的玉环移动到一个新的.jade,得到res来渲染那个页面,然后更新id = responsetext – Adamater

0

试试这个:

var _ = require("lodash"); 
router.get('/search', function(req, res) { 
    req.query = _.pick(req.query, ['lat', 'lon']); // filter query param for exact parameters, if they will not exist it will be empty object 
    // query mongo for documents with given lat, lon 
    req.db.get('items').find(req.query,{},function(e,docs){ 
     res.render('searchAll', { "itemlist" : docs }); 
    }); 
}); 

// for ajax calls, responds with json, that have to be iterated and rendered using frontend code 
router.get('/api/search', function(req, res) { 
    req.query = _.pick(req.query, ['lat', 'lon']); 
    req.db.get('items').find(req.query,{},function(e,docs){ 
     res.json({ "itemlist" : docs }); 
    }); 
}); 
+0

好吧我现在可以从数据库中获取数据,并将其显示在页面上,但是如何让翡翠重申新数据呢? – Adamater

+0

res.render做到了,它获取视图文件并使用新数据进行渲染。但是,如果您要求使用Ajax,请告诉我我将更改代码。 – num8er

+0

哦,我明白了,但我如何获得JavaScript重新加载页面?现在如果我点击它的按钮,那么这个页面有两个版本。或仅仅是页面的特定部分(即:仅需要更改身体) – Adamater