Пустой объект ответа в MongoDb - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь получить все документы в коллекции монго, но вместо этого я получаю пустой ответ. моя база данных называется taskDb, в которой есть коллекция с именем item, в которой хранятся все документы. Я думаю, что, возможно, есть какая-то проблема со схемой, но Mongo меньше схемы, поэтому я не могу найти решение.

index.js

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var cors = require('cors');

app.use(bodyParser.json());
app.use(cors());

Items = require('./items.js');

mongoose.connect('mongodb://localhost/taskDb');
var db = mongoose.connection;

app.get("/",(req, res)=> {
    res.send('Visit /api/*****');
});

app.get("/api/items",(req, res)=> {
    Items.getItems(function(err, items){
        if(err){
            throw err;
        }
        console.log(res.json(items));
        res.json(items);
    });
});

// app.get("/api/matches",(req, res)=> {
//     Matches.getMatches(function(err, matches){
//         if(err){
//             throw err;
//         }
//         res.json(matches);
//     });
// });

// app.get("/api/deliveries/:playerName",(req, res)=> {
//     Deliveries.getPlayerStats(req.params.playerName ,function(err, deliveries){
//         if(err){
//             throw err;
//         }
//         res.json(deliveries);
//     });
// });

app.listen(3005,()=>{
   console.log('Listening on port 3005...');
});

item.js

var mongoose = require('mongoose');

var itemSchema = mongoose.Schema({
    _ID:{
        type: String,
        required: true
    },
    ITEM:{
        type: String,
        required: true
    },
    KEY:{
        type: Number,
        required: true
    },
    STATUS:{
        type: String,
        required: true
    }
});

var Item = module.exports = mongoose.model('item', itemSchema);

// module.exports.getPlayerStats = function (playerName, callback) {
//     Deliveries.aggregate([{$project:{_id: 1,batsman: 1 ,batsman_runs: 1, dismissal:{
//         $cond: [ { $eq: ["$player_dismissed", playerName ] }, 1, 0]
//     }}},{ $match: { batsman: playerName } },
//     { $group: {_id: "$batsman", total_runs: { $sum: "$batsman_runs" },total_dismissal: { $sum: "$dismissal"}}}
//     ], callback);
// }

module.exports.getItems = function (callback, limit) {
    Item.find(callback).limit(limit);
};

1 Ответ

0 голосов
/ 29 июня 2018

В функции getItems я вижу две проблемы:

  1. Условие для find() не указано. Если вы хотите прочитать все записи, вы можете указать это как пустой объект.
  2. Параметр Limit не передается из вашего обработчика запроса в функцию getItems. Вам нужно либо установить значение по умолчанию для какого-либо числа, либо обработать сценарий, в котором limit не будет передан.

Изменение getItems() на что-то вроде ниже должно работать:

module.exports.getItems = function (callback, limit) {
    Item.find({}, callback).limit(limit || 20); // Default limit to a feasible number
};

Кроме того, вы можете передать лимит функции getItems() из обработчика запроса, если вы хотите переопределить значение по умолчанию:

app.get("/api/items",(req, res)=> {
    Items.getItems(function(err, items){
        if(err){
            throw err;
        }
        console.log(res.json(items));
        return res.json(items);
    }, 50); // Pass limit
});
...