我的代码是这样的:
const mongoose = require('../common/mongoose.service').mongoose;
//..
//.. schema definition here..
//..
//-- create the model
const Student = mongoose.model('Student', studentSchema);
//-- delete "__v" field
studentSchema.set('toJSON', {
getters: true,
transform: (doc, ret) => {
delete ret.__v;
return ret;
},
});
exports.createStudent = (studentData) => {
const student = new Student(studentData);
return student.save();
};当我从我的_id控制器调用这个createStudent()方法时,它给了我这个Student。
现在,我试图获得插入的文档,并将代码更新如下:
exports.createStudent = (studentData) => {
const student = new Student(studentData);
return student.save().then( s => { return s } ).catch( err => console.log(err) );
};包版本:
"mongoose": "^5.9.23",
"mongoose-sequence": "^5.2.2",我的问题:
Visual代码编辑器的
createStudent设置为异步。需要吗?then() of save() method中
发布于 2020-07-25 10:45:20
你需要在这里进行一点重构。要么直接从方法返回允诺,要么执行它并将值解析为允诺值。
exports.createStudent = (studentData) => {
const student = new Student(studentData);
return student.save().then( s => { return s } ).catch( err => console.log(err) );
};在上面的代码中,您有一个
语句,然后是/catch,结果是,当它用异步的User.save()保存用户时,您的返回会显式返回,在这种情况下,它将“未定义”。
当猫鼬返回保存方法的承诺时,您可以这样调用它
// return a promise here
exports.createStudent = (studentData) => {
const student = new Student(studentData);
return student.save()
};无论您将createStudent()称为控制器/服务,只要使用then和catch或使用async/await即可。假设我们在下面的函数中调用它。
function execute() {
createStudent({fname:'john', lname: 'doe'}).then(res => {
console.log("student: ", student);
}).catch(err => {
console.log(err);
//handle error
})
}或者简单地使用异步等待,使它更加简单。
async function execute() {
try {
let student = await createStudent({fname:'john', lname: 'doe'});
console.log("student: ", student);
} catch(err) {
// handle error
}
}为了回答您的第二个问题,我不确定我们是否可以使用userSchema.set覆盖toJSON,但是我尝试了下面的内容,它似乎正按照我的预期工作。
这是一个User模型。请注意,toJSON在模型属性中,我在这里删除__v和_id属性。
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
name: {
type: String,
required: true,
maxlength: 30,
trim: true
},
role: {
type: Number,
default: 0
},
todos: [{
type: Schema.Types.ObjectId,
ref: "Todo"
}]
}, {
toJSON: {
getters: true,
transform: function(doc, ret) {
delete ret._id;
delete ret.__v
}
}
});
module.exports = mongoose.model("User", userSchema)我有一个user/,它简单地从我的DB中获取所有用户,它返回我所寻找的响应类型,其中没有__v和_id属性。

https://stackoverflow.com/questions/63086315
复制相似问题