在 express node js 中实现一个简单的搜索栏
implement a simple search bar in express node js
所以我尝试实现一个简单的搜索功能来练习,
我的目标是url“/搜索/(此处的参数)”并获取名称与参数匹配的产品。
这是我的中间件:
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();
});
});
我不知道为什么,但它给了我错误:
Error: Can't set headers after they are sent.
我不明白为什么我得到这个,它说我正在改变 headers,我对此有点陌生,我不确定我在哪里改变 headers ?
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});
});
});
所以我尝试实现一个简单的搜索功能来练习,
我的目标是url“/搜索/(此处的参数)”并获取名称与参数匹配的产品。
这是我的中间件:
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();
});
});
我不知道为什么,但它给了我错误:
Error: Can't set headers after they are sent.
我不明白为什么我得到这个,它说我正在改变 headers,我对此有点陌生,我不确定我在哪里改变 headers ?
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});
});
});