我在对数据库进行简单查询时遇到问题。在本教程之后:https://scotch.io/tutorials/build-a-restful-api-using-node-and-express-4当调用Model.find()时,他会收到一个带有name字段(唯一的自定义字段)和_id和__v的JSON对象。当我这样做时,我收到的只是_id和__v字段。我确实得到了一个成功的回复,说帖子已经创建,但它并没有包含标题或内容字段。然而,查询显示数据从未保存过。
路由和查询:
var express = require("express");
var router = express.Router();
var Post = require("../app/models/post.js");
/* Drop Post collection
Post.remove({}, function(err, num_docs) {
if (err) {
res.send(err);
} else {
console.log("Collection dropped, documents deleted: " + num_docs);
}
});
*/
// Middleware for all routes.
router.use(function(req, res, next) {
console.log("API request made.");
next(); // Go to next routes, don't stop here
});
// Test route to ensure routing is working
router.get("/", function(req, res) {
res.json({
message: "Hooray! Welcome to the API!"
});
});
// On routes that end in /posts
router.route("/posts")
// Create post. (Accessed at POST http://localhost/api/posts)
.post(function(req, res) {
var post = new Post(); // Create new instance of post model
post.title = req.body.title; // Set title (from request)
post.content = req.body.content; // Set content (from request)
// Save the post, and check for errors.
post.save(function(err) {
if (err) {
res.send(err);
} else {
res.json({
message: "Post created!",
title: post.title,
content: post.content
});
}
});
})
.get(function(req, res) {
Post.find({}).exec(function(err, posts) {
if(err) {
res.send(err);
} else {
res.json(posts);
}
});
});
module.exports = router;
响应:
[
{
"_id": "56a6adc31f06c4dc1cf82888",
"__v": 0
},
{
"_id": "56a9768888f806dc1fe45415",
"__v": 0
},
{
"_id": "56a97f3f4e269b7c21311df8",
"__v": 0
}
]
shell中的db查询返回相同的信息,只是一个_id和__v字段。
答案 0 :(得分:2)
我现在感到困惑。它突然起作用,代码与上面完全相同。如果有人偶然发现它并且可以解决这个谜团,我将保持开放状态。
答案 1 :(得分:1)
问题是您需要在content-type
发送帖子请求时设置application/json
,否则无法识别字段。
答案 2 :(得分:0)
对于此代码
post.title = req.body.title; // Set title (from request)
post.content = req.body.content; // Set content (from request)
req.body.title
和req.body.content
不是undefined
?您是否将Post模式中的字段设置为
var PostSchema = new Schema({ 标题:字符串, content:String });
答案 3 :(得分:0)
如果您使用Postman等手动工具来测试您的应用,则还必须在请求正文中的引号周围加上引号,例如'\n'
。
如果您只是放{"key": "some string"}
,那么当文档保存到数据库时,将忽略整个键/值对。
答案 4 :(得分:0)
同样的事情发生在我身上......
前两个POST成功但没有发布我发送的数据:
var p = new Post();
p.result = 'hello-world';
p.save(function (err) {});
启用调试模式:mongoose.set('debug', true);
并在下一个POST中保存字段...
莫名其妙!
答案 5 :(得分:0)
我遇到了这样的错误。
问题是我加载了错误的猫鼬模式。
结果是,保存的唯一字段是两个模式(即_id
和__v
)中都存在的字段。