mongoose Model.create 函数返回未定义
Posted
技术标签:
【中文标题】mongoose Model.create 函数返回未定义【英文标题】:mongoose Model.create function returns undefined 【发布时间】:2020-01-18 04:07:30 【问题描述】:当我尝试创建用户时,上述查询返回 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)
)
line[1] 返回未定义。为什么 ? 注意:满足所有模块要求
【问题讨论】:
【参考方案1】:问题是你同步调用了一个异步函数。它返回 undefined 因为该函数尚未解析。
一个解决方案可能是使用promises 或async/await
。
例子:
async createUser(name, email, password)
const createdUser = await User.create(name,email,password);
return creaatedUser;
【讨论】:
【参考方案2】:创建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]
将始终返回 undefined 因为您正在使用 callbacks
并且从回调中获取价值的唯一方法是推送另一个回调(我真的不鼓励这样做)。但最好的方法是使用Promises
现在猫鼬默认支持`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);
【讨论】:
我在问题中看不到这一点。您创建了架构,但没有创建模型。 那为什么返回 undefined ? 编辑了答案。请仔细阅读 node.js 中的异步函数。\以上是关于mongoose Model.create 函数返回未定义的主要内容,如果未能解决你的问题,请参考以下文章
传递文档数组时,Mongoose 中 Model.create 的原子性
传递文档数组时,Mongoose 中 Model.create 的原子性
Mongoose.create + Q 将 mongoose 承诺转换为 Q 承诺