我正在尝试使用MEAN堆栈实现CRUD操作。我在通过ID获取用户方面遇到问题。它显示状态为true,但返回空文档。
这是我的模特
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);
在检查邮递员时,我的状态是:true,但返回空白文档。 我没有得到任何人的帮助,请帮助。 在此先感谢!
答案 0 :(得分:-1)
您可能无法找到并返回用户的原因可能有多种。我将通过此清单来查看可能发生的情况:
定义架构时,required
字段采用布尔值或函数,而不是字符串。为了安全起见,将您的字符串更改为true
可以确保所有新的数据库记录都包含这些字段。 (https://mongoosejs.com/docs/schematypes.html#schematype-options)
在控制器中导入模型时,无需再次调用mongoose.model
;此步骤在模型文件中执行。确保在模型文件/模块中导出mongoose.model('User', userSchema)
对象,然后在控制器模块中执行常规的const User = require(<pathToModelFile>);
。
如果仍然无法执行...
$ mongo
在终端中运行mongo shell,并使用此处找到的命令来使用您的数据库并搜索User集合:https://docs.mongodb.com/manual/reference/mongo-shell/ 这通常是我对模型和控制器(带有路由)进行编码的方式:
模型文件-注意,您确实需要猫鼬
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;