MongoDB查询不会在我的Express API中返回对象(React)

时间:2017-03-10 05:37:59

标签: mongodb api

我以前这么做过很多次,但我似乎无法找到问题,这可能是一些小而愚蠢的事情。在这里查看/server.js文件! (缩短为演示目的)

/* Make Mongoose promise based */
mongoose.Promise = Promise;  
mongoose.connect('mongodb://localhost:27017', options);
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error: '));

/* Routes */
app.route('/games')
    .post(postGame)
    .get(getGames);
app.route('/games/:id')
    .get(getGame)
    .delete(deleteGame);

app.route("*").get((req, res) => {
    res.sendFile('client/dist/index.html', { root: __dirname });
});

const port = 8080;
app.listen(port, () => {
    console.log(`Connected! Server listening on port: ${port}`);
});

然后,对于我的游戏模型,我在app/models/game.js中有。

import mongoose from 'mongoose';
const Schema = mongoose.Schema;

const gameSchema = new Schema(
    {
        name: {
            type: String,
            required:true
        },
        year: {
            type: Number,
            required:true
        },
        description: {
            type: String,
            required:true
        },
        picture: {
            type: String,
            required:true
        },
        postDate : { type: Date, default: Date.now }
    }
);

export default mongoose.model('Game', gameSchema);

我认为这是我遇到的问题。

/* Import Game model schema */
import Game from '../models/game';

const getGames = (req, res) => {
    Game.find({}, (err, games) => {
    console.log(err, games)
        if (err) {
            res.send(err);
        }
        res.json(games);
    });
}

const getGame = (req, res) => {
    const { id } = req.params;
    Game.findById(id, (err, game) => {
        if (err) {
            res.send(err);
        }
        res.json(game);
    });
}

const postGame = (req, res) => {
  let game = Object.assign(new Game(), req.body);
  game.save(err => {
    if (err) {
      res.send(err);
    }
    res.json({ message: 'Game successfully created!' });
  });
};

const deleteGame = (req, res) => {
  Game.remove(
    { _id: req.params.id },
    err => {
      if (err) {
        res.send(err);
      }
      res.json({ message: 'Game successfully deleted!' });
    }
  );
};

export {
    getGames,
    getGame,
    postGame,
    deleteGame
};
  

请清楚......我进入了mongo shell。

我做了......

connecting to: test

> db.createCollection('Game')

> db.Game.insert({name: "SSB", year: 2001, description: "Fun Game", picture: "http://google.com", postDate: "2017-01-03T08:51:45.888Z"});

当我输入> db.Game.find({});时,我的回复正是我所拥有的......

{ 
    "_id" : ObjectId("58c2223e32daa04353e35bdc"), 
    "name" : "SSB",
    "year" : 2001, 
    "description" : "Fun Game", 
    "picture" : "http://google.com", 
    "postDate" : "2017-01-03T08:51:45.888Z"
}

你知道我什么时候去http://localhost:8080/games我带着一个空的JSON回来了,我只是想知道为什么。我70%肯定,这是因为它没有连接到正确的集合,但我不记得如何测试:(

1 个答案:

答案 0 :(得分:0)

我想将此作为评论,但它不会让我因为我没有50的声誉,但我相信我发现了这个问题。

const getGame = (req, res) => {
const { id } = req.params;
Game.findById(id, (err, game) => {
    if (err) {
        res.send(err);
    }
    res.json(game);
  });
}

在这段代码中,您将id设置为req.params,但您需要将其设置为req.params.id,这是您在路线中传递的内容。

应该是这样的:

const {id} = req.params.id;

如果你记录了id,你可能会得到一个对象:

{ id: "[whatever_id_you_put_here]" }

但是如果你记录req.params.id,你应该得到你在那个地方放的正确的id ..

你得到[]的原因是因为你实际连接到数据库并且你实际上是在尝试“获取”某些东西,但是那些东西不存在所以它会发送一个空响应。

我希望这有帮助..