猫鼬没有保存数据

问题描述 投票:2回答:5

我在数据库上进行简单查询时遇到问题。在本教程之后: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字段。

javascript node.js mongodb express mongoose
5个回答
1
投票

我现在感到困惑。它突然起作用,代码与上面完全相同。如果有人偶然发现它并且可以解决这个谜团,我将保持开放状态。


1
投票

问题是你需要在发送邮件请求时设置content-typeapplication/json否则字段无法识别。


0
投票

对于此代码

post.title = req.body.title; // Set title (from request) post.content = req.body.content; // Set content (from request)

你能检查吗?

  1. req.body.titlereq.body.content不是undefined
  2. 你在Post模式中设置字段为 var PostSchema = new Schema({title:String,content:String});

0
投票

如果您使用像Postman这样的手动工具来测试您的应用,您还必须在请求正文中的引号周围加上引号,例如{"key": "some string"}

如果只是放{key: "some string"},那么当文档保存到数据库时,将忽略整个键/值对。


0
投票

完全相同的事情发生在我身上......

前两个POST成功但没有发布我发送的数据:

var p = new Post();
p.result = 'hello-world';

p.save(function (err) {});

打开调试模式:mongoose.set('debug', true);和下一个POST保存字段...

莫名其妙!

© www.soinside.com 2019 - 2024. All rights reserved.