gpt4 book ai didi

node.js - Mongoose 预保存钩子(Hook)触发,但不保留数据

转载 作者:太空宇宙 更新时间:2023-11-04 00:18:34 26 4
gpt4 key购买 nike

我遇到了一个问题,我的 Mongoose pre.save() 钩子(Hook)正在触发,但属性没有保存到数据库中。我找了很久都没有找到答案。我找到了this thread ,并且我遇到的行为非常相似,但是OP的问题与this的上下文有关,而我似乎有不同的问题。

这是我的 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);
});
});

我能够将博客文章保存到数据库中,并且我的 console.log 可以正确地将 slug 打印到控制台。但是,预保存 Hook 中的 this.slug 不会保留在数据库中。

有人能看出这里出了什么问题吗?提前非常感谢您。

最佳答案

Mongoose 将根据您定义的架构进行操作。
目前,您的架构不包含名为 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
}
});

关于node.js - Mongoose 预保存钩子(Hook)触发,但不保留数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45534185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com