我以前这么做过很多次,但我似乎无法找到问题,这可能是一些小而愚蠢的事情。在这里查看/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%肯定,这是因为它没有连接到正确的集合,但我不记得如何测试:(
答案 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 ..
你得到[]的原因是因为你实际连接到数据库并且你实际上是在尝试“获取”某些东西,但是那些东西不存在所以它会发送一个空响应。
我希望这有帮助..