在快速节点js中实现一个简单的搜索栏

时间:2018-02-02 19:15:34

标签: javascript node.js express middleware

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

我的目标是获取网址“/ search /(参数here)”并获取名称与参数匹配的产品。

这是我的中间件:

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

我不知道为什么,但它给了我错误:

  

错误:发送后无法设置标头。

我看不出为什么我会这样,它说我正在改变标题,我对此有点新意,我不知道我在哪里更改标题?

2 个答案:

答案 0 :(得分:2)

在向客户端呈现响应后,您无法调用下一个中间件(即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});
    });
});

答案 1 :(得分:0)

res.render(..)只能为请求调用一次。因此,您应该添加一个else语句,如下所示:

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