Node.js Mongoose预先保存钩子火灾,但不保存数据

Node.js Mongoose预先保存钩子火灾,但不保存数据,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我遇到了一个问题,我的Mongoose pre.save()钩子正在启动,但是属性没有保存到数据库中。我已经搜索了很长一段时间没有找到答案。我发现,我所经历的行为非常相似,但是OP的问题与这个的上下文有关,而我似乎有一个不同的问题 这是我的models.js: 'use strict'; const mongoose = require("mongoose"); const slugify = require("slugify"); let Schema = mongoose.Schema;

我遇到了一个问题,我的Mongoose pre.save()钩子正在启动,但是属性没有保存到数据库中。我已经搜索了很长一段时间没有找到答案。我发现,我所经历的行为非常相似,但是OP的问题与
这个
的上下文有关,而我似乎有一个不同的问题

这是我的models.js:

'use strict';

const mongoose = require("mongoose");
const slugify = require("slugify");

let Schema = mongoose.Schema;

let BlogPostSchema = new Schema({
    title: {
        type: String,
        required: true
    },
    createdAt: {type: Date, default: Date.now},
    updatedAt: {type: Date, default: Date.now},
    author: String,
    post: {
        type: String,
        required: true    
    }
});

BlogPostSchema.pre('save', function(next) {
    this.slug = slugify(this.title);
    console.log(this.slug);
    next();
});

// Passed to templates to generate url with slug.
BlogPostSchema.virtual("url").get(function() {
    console.log(this.slug);
    console.log(this.id);
    return this.slug + "/" + this.id;
});

BlogPostSchema.set("toObject", {getters: true});

let BlogPost = mongoose.model("BlogPost", BlogPostSchema);

module.exports.BlogPost = BlogPost;
以下是路由器文件index.js中的相关行:

const express = require('express');
const router = express.Router();
const BlogPost = require("../models").BlogPost;

// Route for accepting new blog post
router.post("/new-blog-post", (req, res, next) => {
    let blogPost = new BlogPost(req.body);
    blogPost.save((err, blogPost) => {
        if(err) return next(err);
        res.status(201);
        res.json(blogPost);
    });
});
我能够将博客文章保存到数据库中,并且我的
控制台.log将slug正确打印到控制台。但是,预保存钩子中的
this.slug
不会在数据库中持久化


有人能看出这里有什么问题吗?非常感谢您。猫鼬将根据您定义的模式进行操作。
当前,您的架构不包含名为
slug
的文件

您应该在模式中添加一个
slug
字段。

将当前架构更改为类似以下内容应该可以:

let BlogPostSchema = new Schema({
    slug: String,    
    title: {
        type: String,
        required: true
    },
    createdAt: {type: Date, default: Date.now},
    updatedAt: {type: Date, default: Date.now},
    author: String,
    post: {
        type: String,
        required: true    
    }
});

非常感谢,这解决了这个问题-我希望可以像附加普通JS对象一样附加属性。