gpt4 book ai didi

javascript - 保存对象的两种方式,有什么区别?

转载 作者:行者123 更新时间:2023-12-02 14:49:19 25 4
gpt4 key购买 nike

我正在按照这个 tutorial 学习 Angular 。不,我不明白的是为什么有两种保存/编辑对象的方法?他们并没有真正解释它。

第一种方式(在index.js路由器中):

router.post('/posts', function(req, res, next) {
var post = new Post(req.body);

post.save(function(err, post) {
if (err) { return next(err); }

res.json(post);
});
});

第二种方式(在 Mongoose 模型中):

    var mongoose = require('mongoose');

var PostSchema = new mongoose.Schema({
title: String,
link: String,
upvotes: { type: Number, default: 0 },
comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }]
});

PostSchema.methods.upvote = function(cb) {
this.upvotes += 1;
this.save(cb);
};

mongoose.model('Post', PostSchema);

最佳答案

这两种方式其实是一样的。在第一个示例中,创建了一个新的 Post 实例。在此实例上调用 save 是因为它存在于 PostSchema(继承自 Mongoose Schema)上。

在第二个示例中,我们在 PostSchema 上定义了一个新方法,因此在调用时,this 引用 Post 的实例。cb 参数是一个回调,通常是一个函数。

看这个例子。

router.post('/posts', function(req, res, next) {
var post = new Post(req.body);

post.save(function(err, post) {
if (err) { return next(err); }
var callback = function(err, post) {
console.log("Upvoted");
res.json(post);
}
post.upvote(callback);
});
});

这里默认创建一个带有一票赞成票的新帖子。创建一个新的 Post 实例并将其保存在数据库中。保存后,调用 upvote 方法。将赞成票保存到数据库后,新帖子将在响应中返回。希望这会有所帮助。

关于javascript - 保存对象的两种方式,有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36310920/

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