Ich stoße auf ein Problem, wo mein Mongoose pre.save() Hook feuert, aber das Attribut nicht in der Datenbank gespeichert wird. Ich habe lange gesucht, ohne eine Antwort zu finden. Ich fand this thread, und das Verhalten, das ich erfahre, ist sehr ähnlich, aber OP-Problem ist mit dem Kontext von this
verbunden, während ich ein anderes Problem zu haben scheinen.Mungo pre-save Hook feuert, aber nicht persistent Daten
Hier ist meine 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;
Und hier sind die jeweiligen Linien in der Routerdatei 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);
});
});
Ich kann den Blog-Eintrag in die Datenbank speichern und mein console.log
druckt den Slug korrekt auf die Konsole aus. Das this.slug
in dem Pre-save-Hook wird jedoch in der Datenbank nicht beibehalten.
Kann jemand sehen, was das Problem hier ist? Vielen Dank im Voraus.
Thank you so viel, fest das das Problem - ich erwartete es möglich sein Attribute anhängen möchte ich ein normales JS-Objekt. –