猫鼬 Model.create 函数 returns 未定义
mongoose Model.create function returns undefined
当我尝试创建用户时,上面的查询 returns 为 200,但是每当我登录 MongoDB 时,都没有创建任何集合。有人可以帮忙吗?
//用户模型
const userSchema = mongoose.Schema({
name: {
type : String,
required : true,
trim : true
},
email: {
type: String,
required: true,
unique: true,
lowercase: true,
validate: value => {
if(!validator.isEmail(value)){
throw new Error({error : 'Invalid email address'})
}
}
},
password: {
type: String,
required: true,
minLength: 5
},
// a user can have multiple jobs
jobs : [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Job'
}],
tokens: [{
token: {
type: String,
required: true
}
}]
})
const User = mongoose.model('User', userSchema)
module.exports = User
// 编写的用户函数
createUser(name, email, password){
return User.create({name: name, email: email, password : password}, (err, docs) => {
if(err){
throw err.message;
}
});
}
//routes.js
// user create
router.post('/users', async(req, res) => {
try{
const {name, email, password } = req.body
const user = userManager.createUser(name, email, password); [1]
res.status(200).json(user)
}
catch(error) {
res.status(400).send({error : error.message})
}
})
行[1] returns 未定义。为什么 ?
注意:所有模块要求都已满足
创建 schema
之后,您需要创建一个模型 FROM 该架构。
示例来自 MDN:
// Define schema
var Schema = mongoose.Schema;
var SomeModelSchema = new Schema({
a_string: String,
a_date: Date
});
// Compile model from schema
var SomeModel = mongoose.model('SomeModel', SomeModelSchema );
现在创建模型后,您可以使用 SomeModel.create
编辑:
line[1]
将始终 return 未定义,因为您正在使用 callbacks
并且从回调中获取价值的唯一方法是推送另一个回调(我真的不鼓励这样做)。但最好的方法是使用 Promises
现在 mongoose 默认支持 `Promises。所以,基本上是为了承诺,
// user functions written
async function createUser(name, email, password){
try {
return await User.create({ name: name, email: email, password: password });
} catch (err) {
throw err.message;
}
}
在路由器中添加 await
:
const user = await userManager.createUser(name, email, password);
问题是您同步调用了一个异步函数。它返回未定义,因为该函数尚未解析。
一种解决方案是使用 promises or async/await
.
示例:
async createUser(name, email, password) {
const createdUser = await User.create({name,email,password});
return creaatedUser;
}
我 运行 提到的一点是,如果您没有设置任何字段,则需要传入一个空对象 - 即
好:Model.create({})
不好:Model.create()
当我尝试创建用户时,上面的查询 returns 为 200,但是每当我登录 MongoDB 时,都没有创建任何集合。有人可以帮忙吗?
//用户模型
const userSchema = mongoose.Schema({
name: {
type : String,
required : true,
trim : true
},
email: {
type: String,
required: true,
unique: true,
lowercase: true,
validate: value => {
if(!validator.isEmail(value)){
throw new Error({error : 'Invalid email address'})
}
}
},
password: {
type: String,
required: true,
minLength: 5
},
// a user can have multiple jobs
jobs : [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Job'
}],
tokens: [{
token: {
type: String,
required: true
}
}]
})
const User = mongoose.model('User', userSchema)
module.exports = User
// 编写的用户函数
createUser(name, email, password){
return User.create({name: name, email: email, password : password}, (err, docs) => {
if(err){
throw err.message;
}
});
}
//routes.js
// user create
router.post('/users', async(req, res) => {
try{
const {name, email, password } = req.body
const user = userManager.createUser(name, email, password); [1]
res.status(200).json(user)
}
catch(error) {
res.status(400).send({error : error.message})
}
})
行[1] returns 未定义。为什么 ? 注意:所有模块要求都已满足
创建 schema
之后,您需要创建一个模型 FROM 该架构。
示例来自 MDN:
// Define schema
var Schema = mongoose.Schema;
var SomeModelSchema = new Schema({
a_string: String,
a_date: Date
});
// Compile model from schema
var SomeModel = mongoose.model('SomeModel', SomeModelSchema );
现在创建模型后,您可以使用 SomeModel.create
编辑:
line[1]
将始终 return 未定义,因为您正在使用 callbacks
并且从回调中获取价值的唯一方法是推送另一个回调(我真的不鼓励这样做)。但最好的方法是使用 Promises
现在 mongoose 默认支持 `Promises。所以,基本上是为了承诺,
// user functions written
async function createUser(name, email, password){
try {
return await User.create({ name: name, email: email, password: password });
} catch (err) {
throw err.message;
}
}
在路由器中添加 await
:
const user = await userManager.createUser(name, email, password);
问题是您同步调用了一个异步函数。它返回未定义,因为该函数尚未解析。
一种解决方案是使用 promises or async/await
.
示例:
async createUser(name, email, password) {
const createdUser = await User.create({name,email,password});
return creaatedUser;
}
我 运行 提到的一点是,如果您没有设置任何字段,则需要传入一个空对象 - 即
好:Model.create({})
不好:Model.create()