猫鼬模型密钥未插入 Postman 发布请求中

Posted

技术标签:

【中文标题】猫鼬模型密钥未插入 Postman 发布请求中【英文标题】:Mongoose model keys not being inserted in Postman post request 【发布时间】:2018-07-18 06:38:42 【问题描述】:

我正在尝试使用下面的 post 方法来创建新文档。但是当我在 Postman 中发送一个帖子请求(例如http://localhost:3000/api/posts?title=HeaderThree)时,会创建一个新文档,但缺少键和值。

router.route('/posts')
    .get(function(req, res) 
        Post.find(function(err, posts) 
            if (err)  return res.send(err)
            res.json(posts)
        )
    )
    .post(function(req, res) 
        const post = new Post(
            
                title: req.body.title,
                text: req.body.text
            
        );

        post.save(function(err, post) 
            if (err)  return res.send(err);
            res.json( message: 'Post added!');
        );
    );

架构是这样的:

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const PostSchema = new Schema(
       
        date: type: Date, default: Date.now,
        title: type: String,
        text: type: String ,
        comments: type: Array
    
)

module.exports = mongoose.model('PostSchema', PostSchema);

【问题讨论】:

【参考方案1】:

如果您将数据作为查询字符串发送:

 http://localhost:3000/api/posts?title=HeaderThree
                                 ^^^^^^^^^^^^^^^^^

那么你必须使用req.query从快递服务器获取它们:

const post = new Post(
    
        title: req.query.title,
        text: req.query.text
    
);

如果要将数据作为表单体发送,需要使用body-parser中间件:

const bodyParser = require('body-parser');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded( extended: true ));

...

现在您可以使用req.body 对象来获取提交的数据。

最后一件事,不要忘记在邮递员的正文选项卡下填充表单数据

【讨论】:

我将正文更改为查询,现在它可以完美运行。不过,我一定在其他地方犯了错误,因为我已经包含了 app.use(bodyParser.json()); app.use(bodyParser.urlencoded(extended: true ));【参考方案2】:

尝试添加:

  _id: mongoose.Schema.Types.ObjectId,

在你的模型中:

const PostSchema = new Schema(
       
        _id: mongoose.Schema.Types.ObjectId,
        date: type: Date, default: Date.now,
        title: type: String,
        text: type: String ,
        comments: type: Array
    
)

在插入文档之前,您必须给它一个 _id :

_id : mongoose.Types.ObjectId()

您的文件将是:

const post = new Post(
            
                _id :  mongoose.Types.ObjectId(),
                title: req.body.title,
                text: req.body.text
            
        );

检查这个post

【讨论】:

我试过了,它返回 "message": "document must have an _id before save", "name": "MongooseError" 现在它又回到了以前的状态。它使用默认日期和 id 创建一个文档,但不包括 req.body 值。

以上是关于猫鼬模型密钥未插入 Postman 发布请求中的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬模型在填充后获得未定义的属性

将 findOne 和 findOneAndUpdate 与 HTTP 请求一起使用(猫鼬)

更新猫鼬模式后,新输入的字段未插入已创建的集合中

如果文件未导出,如何使用在单独文件中定义的猫鼬模型?

如何验证猫鼬模式的动态密钥

带有 Postman 的 FCM - 请求缺少身份验证密钥(FCM 令牌)