node.js - mongoose Model.create 函数返回未定义
问题描述
当我尝试创建用户时,上面的查询返回 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] 返回未定义。为什么 ?注意:满足所有模块要求
解决方案
创建后,schema
您需要从该模式创建模型。
来自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
now 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);
推荐阅读
- css - 如何使用 flexbox 在 Css 3 中垂直对齐内容?
- reactjs - 对于我在 React 和 Node JS 中的场景,这是存储 JWT 刷新令牌并访问它的最佳方式
- drools - Drools 自动从 KieSession 中删除事件
- swift - SwiftUI:本机菜单项导航以查看
- java - 无法解析 AWSS3bucket 上的 putObject 方法
- scala - Spark 2.4.3 无法读取 avro 版本 1.9.2 文件
- task - BPMN 任务在其他流程中继续
- dataframe - Spark:如何将orc文件读入RDD格式而不是数据帧
- go - golang 测试上下文未定义 XTestBackground
- cplex - 如何避免 CPLEX OPL 中连续决策变量的值非常小