【问题标题】:Mongoose Saving Incorrect Values猫鼬保存不正确的值
【发布时间】:2016-01-29 06:14:47
【问题描述】:

从发布请求创建对象时,来自请求正文的两个字段都被设置为字段名称本身。我没有收到任何错误,但我也没有在响应中获得请求正文的预期 JSON 对象。我使用的是本地 mongodb 实例,但现在我使用的是 mongolab 数据库,认为它可能会解决问题但没有任何改变。

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

        if (req.body.title !== undefined) {
            post.title = req.body.title; // Set title (from request)
        }
        if (req.body.content !== undefined) {
            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(req.body);
            }
        });

    })

    .get(function(req, res) {
        Post.find({}, { "__v": 0, "_id": 0 }).exec(function(err, posts) {
            if(err) {
                res.send(err);
            } else {
                res.json(posts);
            }

        });
    });

module.exports = router;

请求 JSON:

{
    "title": "sample title",
    "content": "sample content"
}

输出:

[
    {
        "lastUpdated": "2016-01-29T07:26:01.810Z",
        "uploadDate": "2016-01-29T07:26:01.810Z",
        "content": "content",
        "title": "title"
    }
]

【问题讨论】:

  • 你需要比'没有得到预期的结果'更具体一点。你需要显示你正在发送什么以及你期望看到什么。你似乎也暗示这仅在更改数据库连接字符串后才发生变化。在这种情况下,如果这适用于本地实例而不是远程实例,那么权限可能是您的问题。真的不清楚哪个部分不适合您。“GET”或“POST”?需要澄清。
  • 对不起,我添加了输出和请求。
  • 将数据库从本地更改为远程并没有改变任何东西。通过没有得到请求的预期 JSON 对象,我的意思是 res.json(req.body) 返回了一个空的 JSON 对象作为响应。但是内容和标题字段应该基于请求 JSON,但它们不是。
  • @Jordan 您是否使用带有名称属性的 HTML 表单来获取数据?您在将数据导入 JSON 对象时遇到问题吗?
  • 不,我只是在使用邮递员来测试我的 API。我正在将 json 发送到我的 api 路由,该路由具有上面的 get 和 post 方法。我不知道为什么这不起作用,我即将切换到 SQL。我实际上在任何地方都找不到解决方案,也没有人遇到同样的问题,我已经尝试了所有替代方案,但同样的事情一直在发生。

标签: javascript node.js mongodb express mongoose


【解决方案1】:

你不能在不包含正文解析器的情况下使用 req.body 并期望 req.body 以 express 产生预期的结果。你做了npm install body-parser。我没有看到您在代码中需要body-parser。也许您在主文件中包含了body-parser。我相信如果你不使用它 req.body 将是空的。

将此添加到您的其他要求下方

var bodyParser = require("body-parser");

app.use(bodyParser.urlencoded({extended : false}));

app.use(bodyParser.json())

别忘了在终端中输入npm install body-parser

【讨论】:

  • 我的主文件 app.js 中确实包含所有这些内容。我必须在回复中包含什么具体内容才能解析它吗?像我必须做res.json(bodyParser.someFunction(req.body)));吗?
  • res.json({req.body}) 或 res.send(req.body)
  • 两者都不起作用,同样的事情仍然发生。更不用说它也没有保存正确的数据。并且res.json({req.body}) 为意外令牌抛出语法错误并指向req.body 中的.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
相关资源
最近更新 更多