Node.js 为什么mongoose中的save()不是函数?
我正在使用Node.js、Mongoose、MongoDb、express开发一个应用程序 我有两个模式,一个用于学生,一个用于片段。我用的是人口模型。我可以创建一个用户,创建一个代码段并将其链接到该用户。但我无法在用户集合中链接和保存代码段 如何链接和保存用户,使其可以引用其代码段 用户和代码段模式Node.js 为什么mongoose中的save()不是函数?,node.js,mongodb,Node.js,Mongodb,我正在使用Node.js、Mongoose、MongoDb、express开发一个应用程序 我有两个模式,一个用于学生,一个用于片段。我用的是人口模型。我可以创建一个用户,创建一个代码段并将其链接到该用户。但我无法在用户集合中链接和保存代码段 如何链接和保存用户,使其可以引用其代码段 用户和代码段模式 var userSchema = Schema({ name: { type: String, required: true, unique: true }, passwo
var userSchema = Schema({
name: { type: String, required: true, unique: true },
password: { type: String, required: true },
snippet: [{ type: Schema.Types.ObjectId, ref: 'Snippet' }]
})
var snippetSchema = Schema({
user: {type: Schema.Types.ObjectId, ref: 'User'},
title: String,
body: String,
createdAt: {
type: Date,
require: true,
default: Date.now
}
})
这就是我保存代码段的方式,我将其添加到user.save()函数中,这样它可以保存代码段ref,但会给我user.save()不是函数错误
var name = request.session.name.name
User.find({ name: name }).then(function (user) {
if (user) {
console.log('====================')
console.log(user)
user.save().then(function () { // problem is here?
var newSnippet = new Snippet({
user: user._id,
title: title,
body: snippet
})
newSnippet.save().then(function () {
// Successful
console.log('success')
response.redirect('/')
})
})
}
}).catch(function (error) {
console.log(error.message)
response.redirect('/')
})
但是,我实际上得到了打印后,搜索它的对象
[ { _id: 5a2e60cf290a976333b19114,
name: 's',
password: '$2a$10$vD3EaQly4Sj5W3d42GcWeODuFhmHCSjfAJ1YTRMiYAcDBuMnPLfp6',
__v: 0,
snippets: [] } ]
您需要使用
User.findOne
来获取有效的用户对象,这里是一个数组。另外,不要忘了总是在你的承诺中回报一些东西(或者抛出一个错误)
下面是对函数的快速重写。通过一些改进,如箭头函数、常量和扁平承诺链(从不在另一个中使用任何.then
),并避免代码重复
const name = request.session.name.name
User.findOne({ name })
.then(user => {
if (user) return user.save()
// What to do if not found? Throw an error?
throw new Error('User not found')
})
.then(() => {
const newSnippet = new Snippet({
user: user._id,
title: title,
body: snippet,
})
return newSnippet.save()
})
.catch((error) => console.log(error.message))
.then(() => response.redirect('/'))
您需要使用User.findOne
来获取有效的用户对象,这里是一个数组。另外,不要忘了总是在你的承诺中回报一些东西(或者抛出一个错误)
下面是对函数的快速重写。通过一些改进,如箭头函数、常量和扁平承诺链(从不在另一个中使用任何.then
),并避免代码重复
const name = request.session.name.name
User.findOne({ name })
.then(user => {
if (user) return user.save()
// What to do if not found? Throw an error?
throw new Error('User not found')
})
.then(() => {
const newSnippet = new Snippet({
user: user._id,
title: title,
body: snippet,
})
return newSnippet.save()
})
.catch((error) => console.log(error.message))
.then(() => response.redirect('/'))
您看到的确切错误消息是什么?user.save()不是函数。您看到的确切错误消息是什么?user.save()不是函数。