TypeError:newUser.save不是一个函数(在createNew函数中)
在使用spread运算符赋值属性之前,userModel对象具有一个save函数(由mongoose设计),但是在赋值之后,该函数不再被访问。有人可以解释为什么会这样,以及如何绕过它?
const mongoose = require('mongoose')
const UserSchema = new mongoose.Schema({
facebookid: String,
firstname: String,
lastname: String,
email: String,
timezone: Number,
gender: String,
invitationid: String,
referralid: String,
locale: String,
stage: String
})
const User = mongoose.model('User', UserSchema)
const createUser = () => new User()
module.exports = {
createNew : userInfo => {
const userModel = createUser()
const newUser = { ...userModel,
facebookid: userInfo.fid,
firstname: userInfo.first_name,
lastname: userInfo.last_name,
locale: userInfo.locale,
timezone: userInfo.timezone,
gender: userInfo.gender,
invitationid: userInfo.invitationid,
referralid: userInfo.referralid,
stage: 'NA'
}
return newUser.save()
}
}
感谢您的帮助! 伴侣
答案 0 :(得分:1)
实际上,您的newUser
不是User
对象。
...userModel
只会合并对象“拥有”属性,而不是原型。
尝试这样的事情:
const newUser = new User({/* your user */});
newUser.save();
答案 1 :(得分:1)
您可以在创建新用户时传递对象: -
module.exports = {
createNew : userInfo => {
const userModel = createUser({
facebookid: userInfo.fid,
firstname: userInfo.first_name,
lastname: userInfo.last_name,
locale: userInfo.locale,
timezone: userInfo.timezone,
gender: userInfo.gender,
invitationid: userInfo.invitationid,
referralid: userInfo.referralid,
stage: 'NA'
})
return userModel.save()
}
}
并修改
createUser = (user) => new User(user)
现在userModel包含mongoose orm返回的用户,你可以访问save function.Earlier你没有使用mongoose返回的用户对象,你创建了新的
答案 2 :(得分:0)
正如关于问题而非可能的解决方案的细节一样
使用{...userModel}
您将User
实例的直接属性复制到普通对象。从扩展类继承的任何属性或方法都将被忽略,最重要的是,原型链本身将丢失。
save()
方法可能是在moongoose的Schema
类中定义的,所以你会用这种方法失去它。
其他答案中提出的任何解决方案都可以解决问题。