如何使用新的数据使用expressJS重新呈现视图?

我正在使用ExpressJS和MongooseJS(用于访问MongoDB)创build一个NodeJS清单系统。 我正在尝试实施一个search栏。 我希望用户input到search栏中,按回车键,然后查看包含数据库中所有匹配项的更新表。

目前,当用户在search栏中input后按下input键时,jQuery会使用search栏中的文本将POST发送到我的Express服务器。 使用mongooseJS,我find所有匹配。 问题是,当我再次呈现视图时,页面不会更新并向用户显示与search匹配的新信息。

这是我的路由器代码:

var express = require('express'); var router = express.Router(); var InventoryObject = require('mongoose').model('InventoryObject'); var searchdata = ''; /* GET home page. */ router.get('/', function(req, res) { var regSearch = new RegExp('.*'+searchdata+'.*', 'i'); InventoryObject.find({productId: {$regex: regSearch}}).sort('-_id').exec(function (err, data) { res.render('index', {'inventoryObjects' : data}); searchdata = ''; }); }); router.post('/', function(req, res) { searchdata = req.body.searchbar; }); 

一切似乎工作,除了重新渲染页面。 我做错了什么/失踪?

我发现在发布这个问题后不久,我就忘记了res.redirect('/')。 但是,我发现的解决scheme仍然不使用res.redirect('/')。 相反,我使用res.end()在后路线的末尾。 然后,我回到客户端的jQuery脚本,发射了AJAX POST,并使用成功标签来启动一个location.reload()。

客户端POST

 $.ajax({ url: '/', type: 'POST', contentType: 'application/json', data: JSON.stringify({ type:'search', searchbar: ($('#searchbar').val()) }), success: function (data) { location.reload(); } }); 

服务器端,添加res.end()

 var express = require('express'); var router = express.Router(); var InventoryObject = require('mongoose').model('InventoryObject'); var searchdata = ''; /* GET home page. */ router.get('/', function(req, res) { var regSearch = new RegExp('.*'+searchdata+'.*', 'i'); InventoryObject.find({productId: {$regex: regSearch}}).sort('-_id').exec(function (err, data) { res.render('index', {'inventoryObjects' : data}); searchdata = ''; }); }); router.post('/', function(req, res) { searchdata = req.body.searchbar; res.end(); }); 

你是否肯定要这样做?

 success: function (data) { location.reload(); } 

为什么不用这个调用获取更新后的库存数据,并在成功函数中使用它来更新页面?