【问题标题】:implement a simple search bar in express node js在express node js中实现一个简单的搜索栏
【发布时间】:2018-02-02 19:15:33
【问题描述】:

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

我的目标是获取 url “/search/(parameter 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();
    });
});

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

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

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

【问题讨论】:

    标签: javascript node.js express middleware


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        • 2019-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多