node.js - 当数据不存在时,猫鼬 findOne 卡住了
问题描述
描述
我Model.findOne().exec()
根据猫鼬文档使用,{ username: ycjcl666 }
在我的mongodb中有,当我findOne({ username: 'ycjcl666' })
,它可以显示数据,但我查询不存在数据,例如findOne({ username: 'ycjcl888' })
,应用程序卡住了。
应用
用于koa@2 + mongoose@^5.0.18 + mongodb@3.6.3
创建登录/注册应用程序。
控制器代码:
// controller/user.js
class UserController {
async login(ctx) {
const password = await UserService.loginPass(username);
}
}
服务代码,就像这样,但它在不存在时卡住了,我try...catch
但没有得到console
信息
// service/user.js
class UserService {
async loginPass() {
return User.findOne({ username }).exec();
}
}
// model/user.js
import mongoose from 'mongoose';
import timeZone from 'mongoose-timezone';
const Schema = mongoose.Schema;
const schema = new Schema({
model: {
id: String,
name: String,
},
avatar: String,
username: {
type: String,
required: true,
trim: true,
},
password: {
type: String,
required: true,
},
count: {
type: Number,
default: 0,
},
updated_at: {
type: Date,
default: Date.now,
},
created_at: {
type: Date,
default: Date.now,
},
}, {
// remove __v
versionKey: false,
timestamps: {
createdAt: 'created_at',
updatedAt: 'updated_at',
},
});
schema.index({ username: 1 }, { unique: true });
schema.index({
updated_at: -1,
});
schema.plugin(timeZone);
export default mongoose.model('User', schema);
截屏
解决方案
你使用await
inawait UserService.loginPass(username);
那意味着loginPass
必须返回 a Promise
,我的意思是你不需要await
在loginPass
函数中使用
class UserService {
loginPass() {
return User.findOne({ username }).exec();
}
}
class UserController {
async login(ctx) {
const password = await UserService.loginPass(username);
}
}
或者
class UserService {
async loginPass() {
return await User.findOne({ username }).exec();
}
}
class UserController {
login(ctx) {
const password = UserService.loginPass(username);
}
}
并确保您没有使用async/await
您正在调用的位置UserController.login
(如果显式调用)
推荐阅读
- google-cloud-platform - 云组实例、云 vm 实例
- javascript - 使用 THREEjs 加载纹理的提升问题
- python - numpy errstate 属性的正确替代方法是什么?
- javascript - 如何取消选中属性选择的复选框
- java - Java Swing Windows 10 外观和感觉
- .net-core - 正确实现 Azure 函数应用的后台工作程序
- python - 为什么我的 except 块被跳过了?
- neovim - 如何在 coc explorer neovim 中显示点文件?
- java - 证书上的“名称约束检查失败”
- javascript - 如何访问兄弟 Vuex 状态属性和 getter