如何解决User.find({}) 没有在 Node.js 中正确返回控制台
总的来说,我对 mongodb 和后端开发还很陌生,我在尝试查询 mongodb 时遇到了困难。我只是想创建一个路由,该路由返回“users”数据库中的所有用户,这些用户的项目符号属性大于 0。我将在下面发布我的用户模型。
现在在我的 getUsers 控制器中,我只是尝试使用 console.log 记录结果,但没有成功。最终我想要实现的是这个 getUsers 路由将由我的 /dashboard 路由在我的 indexRouter.js 中触发。然后我需要将结果传递给客户端。同样,我对表达和后端开发还很陌生,所以任何帮助都会很棒!
除了我在堆栈上发布的文件之外,我还包括任何服务器和/或配置相关问题的 github 存储库。我的堆栈示例中的 .js 文件比我的 github 存储库文件更新,但所有其他文件应该相同。
Full Github Repo
usermodel.js
const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema({
name: {
type: String,required: true
},email: {
type: String,password: {
type: String,date: {
type: Date,default: Date.Now
},bullets: {
type: Number,default: 0
}
});
const User = mongoose.model('User',UserSchema);
module.exports = User;
userController.js(我没有包含所有控制器,只是我现在正在尝试使用的控制器)
const User = require('./usermodel');
const passport = require('passport');
const bcrypt = require('bcryptjs');
exports.getUsers = (req,res,next) => {
console.log(User.find({ bullets: { $gt: 0 } }))
}
userRoutes.js
const express = require('express');
const router = express.Router();
const controller = require('./userController');
router.route('/login')
.get(controller.getLogin)
.post(controller.postLogin)
router.route('/register')
.get(controller.getRegister)
.post(controller.postRegister)
router.route('/logout')
.get(controller.getlogout)
router.route('/buyBullet')
.get(controller.buyBullet);
router.route('getUsers')
.get(controller.getUsers);
module.exports = router;
indexRouter.js
const express = require('express');
const router = express.Router();
const { ensureAuthenticated } = require('../../config/auth');
router.get('/dashboard',ensureAuthenticated,(req,next) => {
res.render('dashboard',{
name: req.user.name
});
});
module.exports = router;
解决方法
原因是因为 Model.find()
是一个异步函数,所以当您 console.log
函数调用时,它会记录调用返回的承诺。如果您想将其用作中间件,我建议使 controller.getUsers
函数异步并等待 Model.find()
调用
userController.js:
exports.getUsers = async (req,res,next) => {
console.log(await User.find({ bullets: { $gt: 0 } }))
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。