Javascript 在express node js中实现一个简单的搜索栏

Javascript 在express node js中实现一个简单的搜索栏,javascript,node.js,express,middleware,Javascript,Node.js,Express,Middleware,所以我试着实现一个简单的搜索功能来练习 我的目标是使用url“/search/(这里的参数)”并获得与参数匹配的产品名称 这是我的中间件: router.get('/search/:title', function(req, res, next) { var title = req.params.title; Product.find({title: title}, function (err, products) { if(err) {

所以我试着实现一个简单的搜索功能来练习

我的目标是使用url“/search/(这里的参数)”并获得与参数匹配的产品名称

这是我的中间件:

router.get('/search/:title', function(req, res, next) {
    var title = req.params.title;
    Product.find({title: title}, function (err, products) {
        if(err) {
            res.render('shop/search', {products: null});
        }
        res.render('shop/search', {products: products});
        next();
    });
});
我不知道为什么,但它给了我一个错误:

错误:发送邮件后无法设置邮件头

我不明白为什么我会这样,它说我正在更改标题,我对这有点陌生,我不确定我在哪里更改标题?

res.render(…)对于请求只能调用一次。因此,您应该添加以下else语句:

if(err)
    res.render('shop/search', {products: null});
else
    res.render('shop/search', {products: products});

在向客户端呈现响应后,不能调用下一个中间件(即
next()
),应将其删除,并使用
return
语句停止其余代码的执行,以下是正确的语法:

router.get('/search/:title', function(req, res, next) {
    var title = req.params.title;
    Product.find({title: title}, function (err, products) {
        if(err) {
            return res.render('shop/search', {products: null});
            ^^^^^^
        }
        res.render('shop/search', {products: products});
    });
});