Node.js使用Mongoose操作MongoDB时userSchema未定义引用错误如何解决
错误原因
- 你的路由文件中没有定义也没有引入过
userSchema变量,调用mongoose.model('Users', userSchema)时找不到对应变量,直接触发引用错误。 - 你已经在Schema定义文件中通过
module.exports = mongoose.model('Users', userSchema)导出了编译完成的User模型,完全不需要在路由代码中重复编译模型,重复调用mongoose.model编译同一个模型还可能触发mongoose的重名模型报错。
解决方法
- 首先修正Schema定义文件的小问题:你在email字段的配置里写了大写的
Required,mongoose的字段必填配置是小写的required,大写的配置不会生效,直接改成required: 'Email address cannot be left blank.'即可。 - 修改路由文件头部的代码,删除错误的
var User = mongoose.model('Users', userSchema);这一行,改为引入你写的Schema文件即可。
假设你的Schema代码保存在./models/user.js路径下,路由文件保存在./routes/user.js路径下,路由文件的头部引入代码改成如下即可:
var mongoose = require('mongoose'); var crypto = require('crypto'), hmac, signature; const { check, validationResult } = require('express-validator/check'); const { matchedData, sanitize } = require('express-validator/filter'); // 引入提前定义好的User模型,路径根据你自己的项目文件结构调整 var User = require('../models/user');
按上述修改后就不会再出现userSchema is not defined的报错了。
内容的提问来源于stack exchange,提问作者Blurfquarf
相关产品推荐
相关产品推荐

