NodeJS – 快速重载res.render()后面的页面

我使用MongoDB和NodeJS(使用Express Framework)。

我实际上做了什么:

  • 在MongoDb中抓取一些数据
  • 呈现这些数据。

我想做的事:

筛选特定项目。

过滤的结果都是正确的,但我的问题是,该页面将呈现两次。

我怎样才能防止呢?

我有一个主要的比赛,实际上看起来像这样:

app.get('/main', auth, function(req, res) { getItems(req, res, function(results) { renderResults(req, res, results); }); }); 

这是我的renderresult函数:

 function renderResults(req, res, results) { console.log("In Rendermethode arrived:"); console.log(results.items); res.render('pages/main', { offerings: results.items, ownUser: { id: req.session.user || "" }, filterObj: { isActivated: typeof results.filterObj !== 'undefined', filterFor: typeof results.filterObj !== 'undefined' ? results.filterObj.filter : "", filterText: typeof results.filterObj !== 'undefined' ? results.filterObj.filterText : "" } }); } 

我所做的是在前端发布一个请求:

 $("button.doSearch").on("click", function(e) { var dFilter = $("div.filterDropdown button").attr("value") || "", dFilterText = $("input.searchterm").val() || ""; $.post("/search", { filter: dFilter, filterText: dFilterText }, function(data, status) { }); }); 

这是search的后端代码片段:

 app.post('/search', auth, function(req, res) { console.log("Filterrequest received."); getItems(req, res, function(results) { renderResults(req, res); }); }); 

我想你是两次渲染相同的观点,因为你在请求get和post都调用renderResults函数

问题:

您所做的第一个HTTP请求是对/main url的GET请求,express处理它并呈现pages/main视图

第二个请求是xhr发布到/search url,express将处理它并呈现相同的视图pages/main (整个页面)

把整个页面渲染到你的AJAX对象是没有意义的,相反,你可以渲染一个JSON对象并使用本地JavaScript或者JQuery来更新你的页面

解:

根据请求types渲染不同types的数据(xhr OR否):

 function renderResults(req, res, results) { var result = { offerings: results.items, ownUser: { id: req.session.user || "" }, filterObj: { isActivated: typeof results.filterObj !== 'undefined', filterFor: typeof results.filterObj !== 'undefined' ? results.filterObj.filter : "", filterText: typeof results.filterObj !== 'undefined' ? results.filterObj.filterText : "" } }; if (!req.xhr) { return res.render('pages/main', result); } res.json(result); }