首页 > 解决方案 > 即使没有拒绝,也要使用“.catch()”来承诺?

问题描述

所以我才刚刚开始了解猫鼬。此代码运行成功,并在我第一次提交时将文档推送到 MongoDB。但是当我尝试创建另一个帖子时它失败了。

//Post.js file
const mongoose = require('mongoose')

let Post = function(data, user) {
    this.data = data
    this.username = user
    this.errors = []
}

Post.prototype.validate = function() {
    if (this.data.text == "") {this.errors.push("Cannot be left blank")}
}

Post.prototype.create = function() {
    return new Promise((resolve, reject) => {
        this.validate()
        if (!this.errors.length) {
            const postSchema = new mongoose.Schema({
                body: String,
                author: String,
            })
            const PostModel = mongoose.model('Post', postSchema)
            const post = new PostModel({
                body: this.data,
                author: this.username
            })
            post.save(() => {
                resolve()
            })
        } else {
            console.log("Failed")
        }
    })
}

module.exports = Post

//postController.js file

const Post = require("../models/Post")

exports.create = function(req, res) {
    let post = new Post(req.body.text, req.session.user.username)
    post.create().then(() => {
        res.send("Post created")
    }).catch(() => {
        res.send("Failed")
    })
}

所以,是的,如前所述,第一次提交帖子时,一切都成功运行,但在第二个帖子之后,我猜测会发生某种形式的错误,并且“.catch()”在 postController 文件中被调用,即使承诺不包含“reject()”。

标签: javascriptmongodbmongoose

解决方案


推荐阅读