node.js - Mongoose findById 返回空文档
问题描述
我正在尝试使用 MEAN 堆栈实现 CRUD 操作。我在通过 ID 获取用户时遇到问题。它显示状态为真,但它返回一个空文档。
这是我的模型:
const userSchema = new mongoose.Schema({
fullName: {
type: String,
required: 'Full name can\'t be empty '
},
userName: {
type: String,
required: 'user name can\'t be empty ',
unique: true
},
email: {
type: String,
required: 'email can\'t be empty ',
unique: true
});
mongoose.model('User', userSchema);
在我的控制器中:
const mongoose = require('mongoose');
const passport = require('passport');
var ObjectId = require('mongoose').Types.ObjectId;
const User = mongoose.model('User');
module.exports.getuser = (req, res, next) => {
if(!ObjectId.isValid(req.params.id))
return res.status(400).send(`No record with given id : ${req.params.id}`);
User.findById(req.params.id, (err, user) => {
if(!err){ res.status(200).json({status: true, user}); }
else{ console.log('Error in retriving User :' + JSON.stringify(err, undefined, 2)); }
});
}
这是路线:
router.get('/:id', jwtHelper.verifyJwtToken, ctrlUser.getuser);
在检查邮递员时,我得到了 status: true 但它返回一个空白文档。我不知道发生了什么事请任何人帮忙。提前致谢!!
解决方案
您无法找到并返回用户可能有多种原因。我会仔细检查此清单以查看可能发生的情况:
当您定义架构时,该
required
字段采用布尔值或函数,而不是字符串。为了安全起见,将字符串更改true
为以确保所有新的数据库记录都包含这些字段是有意义的。(https://mongoosejs.com/docs/schematypes.html#schematype-options)当您在控制器中导入模型时,无需
mongoose.model
再次调用;此步骤在您的模型文件中执行。确保您mongoose.model('User', userSchema)
在模型文件/模块中导出对象,然后const User = require(<pathToModelFile>);
在控制器模块中执行正常操作。
如果这仍然不起作用...
- 您需要确保您的记录实际上保存在您的数据库中。通过运行
$ mongo
并使用此处找到的命令在终端中运行 mongo shell 来使用您的数据库并搜索用户集合:https ://docs.mongodb.com/manual/reference/mongo-shell/
这就是我通常对模型和控制器进行编码的方式(带有路由):
模型文件 - 请注意,您确实需要 Mongoose
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
fullName: {
type: String,
required: true
},
userName: {
type: String,
required: true,
unique: true
},
email: {
type: String,
required: true,
unique: true
});
module.exports = mongoose.model('User', userSchema);
控制器/路由器 -
const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const passport = require('passport');
const User = require('User');
router.get('/:id', jwtHelper.verifyJwtToken, async (req, res) => {
try {
const user = await User.findById(req.params.id);
res.status(200).json({status: true, user});
} catch (e) {
res.status(400).json({err: e});
}
});
module.exports = router;
推荐阅读
- wordpress - 如何更改 WordPress 中特定用户角色的会话过期时间?
- in-app-purchase - 如何将 iOS/Android 应用内购买与 WHMCS 计费系统集成
- python - 带有 for 循环的美丽汤 find_all 仅返回第一个元素
- php - 使用谷歌日历的 cron 工作
- jquery - JQuery 日期选择器范围
- javascript - 使用 guildMemberAdd 事件的欢迎消息不起作用 | 不和谐.js
- javascript - 如何将变量从我的帖子传递给我的 get?
- javascript - Javascript;它是否有助于 GC 清理无头变量?
- visual-c++ - MSVC 显示内存泄漏,而 VLD 没有
- flutter - 在 dart 中覆盖类变量时出错