Node.js 如何使用带有新数据的expressJS重新渲染视图?

Node.js 如何使用带有新数据的expressJS重新渲染视图?,node.js,express,mongoose,Node.js,Express,Mongoose,我正在使用ExpressJS和MongooseJS(用于访问MongoDB)创建一个NodeJS清单系统。我正在尝试实现一个搜索栏。我希望用户在搜索栏中键入,按enter键,然后看到一个更新的表,其中包含数据库中的所有匹配项 目前,当用户在搜索栏中键入内容后按enter键时,jQuery会将搜索栏中的文本发送到my Express服务器。使用mongooseJS,我找到了所有匹配项。问题是,当我再次呈现视图时,页面不会更新并向用户显示与搜索匹配的新信息 这是我的路由器代码: var expres

我正在使用ExpressJS和MongooseJS(用于访问MongoDB)创建一个NodeJS清单系统。我正在尝试实现一个搜索栏。我希望用户在搜索栏中键入,按enter键,然后看到一个更新的表,其中包含数据库中的所有匹配项

目前,当用户在搜索栏中键入内容后按enter键时,jQuery会将搜索栏中的文本发送到my Express服务器。使用mongooseJS,我找到了所有匹配项。问题是,当我再次呈现视图时,页面不会更新并向用户显示与搜索匹配的新信息

这是我的路由器代码:

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();
}