【问题标题】:My mongodb return the array empty []我的 mongodb 返回数组为空 []
【发布时间】:2018-01-16 04:22:54
【问题描述】:

我正在研究使用 Node.js、AngularJS、Express 和 MongoDB 使用 MEAN 堆栈构建全堆栈 JavaScript 应用程序。

我在第三部分,我必须检索数据库中的所有酒店。

当我在浏览器中输入http://localhost:3000/api/hotels/时,我的数据库返回一个空数组,但hotel.data.json文件已满。

我也试了一份section5老师的期末作业,结果还是一样,我的数据库是空的[]。 这是hotels.controllers文件的代码:

var mongoose = require('mongoose');
var Hotel = mongoose.model('Hotel');


module.exports.hotelsGetAll = function(req, res) {


  console.log('GET the hotels');
  console.log(req.query);

  var offset = 0;
  var count = 5;

  if (req.query && req.query.offset) {
    offset = parseInt(req.query.offset, 10);
  }

  if (req.query && req.query.count) {
    count = parseInt(req.query.count, 10);
  }

  Hotel
    .find()
    .skip(offset)
    .limit(count)
    .exec(function(err, hotels) {
      console.log("Found hotels", hotels.length);
      res
        .json(hotels);
    });

};

module.exports.hotelsGetOne = function(req, res) {
  var id = req.params.hotelId;
  console.log('GET hotelId', id);

  Hotel
    .findById(id)
    .exec(function(err, doc) {
      res
        .status(200)
        .json(doc);
    });

};

module.exports.hotelsAddOne = function(req, res) {
  console.log("POST new hotel");
  var db = dbconn.get();
  var collection = db.collection('hotels');
  var newHotel;

  if (req.body && req.body.name && req.body.stars) {
    newHotel = req.body;
    newHotel.stars = parseInt(req.body.stars, 10);
    collection.insertOne(newHotel, function(err, response) {
      console.log("Hotel added", response);
      console.log("Hotel added", response.ops);
      res
        .status(201)
        .json(response.ops);
    });
    // console.log(newHotel);
    // res
    //   .status(200)
    //   .json(newHotel);
  } else {
    console.log("Data missing from body");
    res
      .status(400)
      .json({
        message: "Required data missing from body"
      });
  }

};

【问题讨论】:

  • 你想从哪里提取数据?来自数据库还是来自 json 文件?
  • 也发布你的路线,你的 console.log("Found hotels", hotels.length) 显示什么
  • 您是从 Mongo 还是从 hotel.data.json 获取数据?不清楚

标签: javascript mongodb mongoose database


【解决方案1】:

感谢您的回复。

这是路由文件:

var express = require('express');
var router = express.Router();

var ctrlHotels = require('../controllers/hotels.controllers.js');

// Hotel routes
router
  .route('/hotels')
  .get(ctrlHotels.hotelsGetAll);

router
  .route('/hotels/:hotelId')
  .get(ctrlHotels.hotelsGetOne);

router
  .route('/hotels/new')
  .post(ctrlHotels.hotelsAddOne);

module.exports = router;

我的 console.log() 告诉:

GET /api/hotels
Requested by: undefined
GET the hotels
{}
(node:2780) DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library ins
null
[]
Found hotels 0

我有一个所有酒店的hothel-data.json文件,视频中的教授在连接db类型mongod时在命令提示符下,但是他给了我一个错误,所以当我插入db类型时: mongod --dbpath = 数据。

我有一个主文件夹,里面有一个 API 文件夹,里面有 3 个文件夹。

1 个 CONTROLLES 文件夹,包含 hotels-controllers.js,2 个 DATA 文件夹,包含 db.js、dbconnection.js、hotel-data.json、hotels.model.js,以及 3 个包含 index.js 的 ROUTES 文件夹。

【讨论】:

    【解决方案2】:

    我解决了导入hotel-data.json文件的问题,现在可以了,当输入ocalhost: 3000 / api /hotels 我看到所有的酒店。

    还是谢谢。

    极光

    【讨论】:

      猜你喜欢
      • 2012-10-22
      • 1970-01-01
      • 2018-08-27
      • 2019-04-15
      • 2017-09-12
      • 2016-03-24
      • 2015-07-10
      • 1970-01-01
      相关资源
      最近更新 更多