Node.js没有给出任何响应并继续加载

时间:2018-12-22 06:35:26

标签: node.js mongoose

如果我正在使用此功能,则会得到正确的响应。

router.get('/', function(req, res, next) {
   var products = Product.find();
   res.render('shop/index', { title: 'Shopping-Cart', products: products });
});

如果我使用以下功能,则我的本地服务器未给出任何响应并继续加载。

router.get('/', function(req, res, next) {
  Product.find(function (err, docs){
    res.render('shop/index', { title: 'Shopping-Cart', products: docs });
  });  
});

帮我解决这个问题。

3 个答案:

答案 0 :(得分:0)

尝试一下。添加匹配对象以查找方法。

router.get('/', function(req, res, next) {
  Product.find({}, function (err, docs){
    res.render('shop/index', { title: 'Shopping-Cart', products: docs });
  });  
});

答案 1 :(得分:0)

第二个是完全错误的。这整个事情:

function (err, docs){
    res.render('shop/index', { title: 'Shopping-Cart', products: docs });
  } 

被作为参数传递给find()方法。这绝对没有意义

正确的是这样的:

Product.find().then(docs=>{
 res.render('shop/index', { title: 'Shopping-Cart', products: docs })
}).catch(err=>console.log(err))

答案 2 :(得分:0)

由于您尚未指定正在使用的数据库,因此我假设与MongoDB类似。查找操作的第一个参数必须是查询对象(如果有)。 Documentation

因此,您可以通过以下任何一种方式来调整代码:

  1. var products = await Product.find(); // Using async-await res.render('shop/index', { title: 'Shopping-Cart', products: products });
  2. Product.find({}, function(err, products) { // Using callbacks res.render('shop/index', { title: 'Shopping-Card', products: products }); }
  3. Product.find().then(function(products) { // Using Promises res.render('shop/index', { title: 'Shopping-Card', products: products }); }