【问题标题】:Basic GET Request using Express.js & Mongoose使用 Express.js 和 Mongoose 的基本 GET 请求
【发布时间】:2019-03-10 10:57:14
【问题描述】:

我正在执行一项任务,以列出 mongoDB 数据库中的所有数据,但我无法找出哪里出错了。这似乎是一个相当简单的问题,但每当我运行提供的 mocha 测试时,它总是抛出 404 错误。以下是测试的相关部分:

  it('should it able to retrieve all listings', function(done) {
    agent.get('/api/listings')
      .expect(200)
      .end(function(err, res) {
        should.not.exist(err);
        should.exist(res);
        res.body.should.have.length(147);
        done();
      });
  });

这是我的 GET 请求代码。我尝试了几种不同的编码方式,但这似乎是以 JSON 格式返回所需数据的最简单/最直接的方式。

exports.list = function(req, res) {
  Listing.find(function(err, listing){
    if(err){
      res.status(404).send(err);
    } else {
    res.json(listing);
  }})
};

还有什么我应该做的吗?我一直在看教程和请求的基本示例,它似乎应该工作,但它没有。任何帮助将不胜感激。

【问题讨论】:

    标签: node.js express mongoose get mocha.js


    【解决方案1】:
    • 确保中间件函数(GET请求的代码)映射到/api/listings
    • 我不确定exports.list。应该是module.exports
    • 根据您的代码,我假设您使用的是 mongoose ODM。在这种情况下,我认为您需要将查询传递给 find 方法check this out
    • 您可能想确保在测试初始化​​时已连接到数据库,并且在测试开始之前完成
    • 记录错误总是有帮助的

    结帐express-generator 搭建样板快递应用程序。可能有助于将其与您的应用进行比较,以检查其是否正确连接

    【讨论】:

    • 我将导出更改为 module.exports,并更新了查询以传递一个空对象,该对象应返回所有可用数据。 GET 请求映射应该在路由中,对吧?
    【解决方案2】:

    似乎您没有将第一个参数传递给find method。只有回调...试试这个:

    Listing.find({}, function(err, listing) {
      if (err) {
        res.status(404).send(err);
      } else {
        res.json(listing);
      }
    })
    

    我假设您想要所有记录,这就是我们传递空对象 {} 的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 2021-07-25
      • 2018-04-24
      • 2012-11-20
      • 1970-01-01
      相关资源
      最近更新 更多