Node.js 如何使用带有新数据的expressJS重新渲染视图?
我正在使用ExpressJS和MongooseJS(用于访问MongoDB)创建一个NodeJS清单系统。我正在尝试实现一个搜索栏。我希望用户在搜索栏中键入,按enter键,然后看到一个更新的表,其中包含数据库中的所有匹配项 目前,当用户在搜索栏中键入内容后按enter键时,jQuery会将搜索栏中的文本发送到my Express服务器。使用mongooseJS,我找到了所有匹配项。问题是,当我再次呈现视图时,页面不会更新并向用户显示与搜索匹配的新信息 这是我的路由器代码:Node.js 如何使用带有新数据的expressJS重新渲染视图?,node.js,express,mongoose,Node.js,Express,Mongoose,我正在使用ExpressJS和MongooseJS(用于访问MongoDB)创建一个NodeJS清单系统。我正在尝试实现一个搜索栏。我希望用户在搜索栏中键入,按enter键,然后看到一个更新的表,其中包含数据库中的所有匹配项 目前,当用户在搜索栏中键入内容后按enter键时,jQuery会将搜索栏中的文本发送到my Express服务器。使用mongooseJS,我找到了所有匹配项。问题是,当我再次呈现视图时,页面不会更新并向用户显示与搜索匹配的新信息 这是我的路由器代码: var expres
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(“/”)。但是,我发现works的解决方案仍然没有使用res.redirect(“/”)。相反,我在post路由的末尾使用了res.end()。然后,我返回到客户端jQuery脚本,该脚本启动了AJAX POST,并使用成功标记启动location.reload() 客户端邮件
$.ajax({
url: '/',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
type:'search',
searchbar: ($('#searchbar').val())
}),
success: function (data) {
location.reload();
}
});
服务器端,添加了res.end()
你确定你想这么做吗
success: function (data) {
location.reload();
}
为什么不通过该调用获取更新的库存数据,并在success函数中使用它来更新页面 我认为您必须重定向回.post路由。EJS视图包含一个大表,通过在GET请求中呈现页面来填充该表。如果使用success标记中的数据,则必须使用jQuery重建表。对我来说,能够再次呈现页面而不是通过EJS重建已经有“模板”的表似乎很好。
success: function (data) {
location.reload();
}