Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose/NextJS-未定义模型/编译后无法覆盖模型_Node.js_Mongodb_Express_Mongoose_Next.js - Fatal编程技术网

Node.js Mongoose/NextJS-未定义模型/编译后无法覆盖模型

Node.js Mongoose/NextJS-未定义模型/编译后无法覆盖模型,node.js,mongodb,express,mongoose,next.js,Node.js,Mongodb,Express,Mongoose,Next.js,TL;DR EDIT:如果您来自谷歌,这就是解决方案: module.exports=mongoose.models.User | | mongoose.model(“User”,UserSchema); 对于非TL;博士回答,检查已接受的回答 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 我在一个NextJS网站上工作,在后端我使用Mongoose和Express。每当我使用注册函数时,我在后端都会遇到以下错误: {“name”:“Test”,“

TL;DR EDIT:如果您来自谷歌,这就是解决方案:

module.exports=mongoose.models.User | | mongoose.model(“User”,UserSchema);
对于非TL;博士回答,检查已接受的回答

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我在一个NextJS网站上工作,在后端我使用Mongoose和Express。每当我使用注册函数时,我在后端都会遇到以下错误:

{“name”:“Test”,“hostname”:“DESKTOP-K75DG72”,“pid”:7072,“level”:40,“route”:/api/v1/signup”,“method”:“POST”,“errorMessage”:“UserModel未定义”,“msg”:“time”:“2020-06-17T23:51:34.566Z”,“v”:0}
我怀疑这个错误是因为我在其他控制器中使用了UserModel。直到我做了一个新的控制器,这个错误才发生。所以我的问题是,如何解决这个问题/如何在不同的控制器/中间件中使用相同的模型

我认为这个问题与这篇文章有关,我之前收到过这个错误,但不知怎么的,我设法解决了它

编辑:错误在models/User.js中,在预保存中间件中,UserModel未在该级别定义,如何验证是否已存在使用该用户名的用户,如果已存在,则拒绝新文档?

在controllers/RegisterLogin.js[发生错误的地方]

const UserModel=require(“../models/User”);
//更多软件包。。。
异步函数注册(req、res){
试一试{
常量值=等待signUpSchema.validateAsync(请求正文);
常数响应=等待axios({
方法:“张贴”,
url:“https://hcaptcha.com/siteverify",
数据:qs.stringify({
响应:value.token,
秘密:process.env.HCAPTCHA,
}),
标题:{
“内容类型”:“application/x-www-form-urlencoded;charset=utf-8”,
},
});
如果(!response.data.success){
抛出新错误(errorHandler.errors.HCAPTCHA_过期);
}
const hashPassword=等待新承诺((res,rej)=>{
bcrypt.hash(
value.password,
parseInt(process.env.SALTNUMBER,10),
函数(err、hash){
if(err)rej(err);
res(散列);
}
);
});
等待UserModel.create({
用户名:value.userName,
userPassword:hashPassword,
用户:错,
用户类型:“常规”,
registeredIP:req.ip | |“不适用”,
lastLoginIP:req.ip | |“不适用”,
});
返回res.status(200).json({
成功:没错,
细节:
“您的用户已成功创建!在6秒内重定向”,
});
}捕捉(错误){
const{message}=err;
if(errorHandler.isUnknownError(消息)){
logger.warn({
路线:“/api/v1/signup”,
方法:“张贴”,
错误消息:消息,
});
}
返回res.status(200).json({
成功:错,
详细信息:errorHandler.parseError(消息),
});
}
}
module.exports={signUp};
在controllers/Profile.js[如果我在这里使用UserModel,它会破坏一切]

const UserModel=require(“../models/User”);
//加上其他套餐。。。
异步函数更改密码(req、res){
试一试{
const value=wait passwordChangeSchema.validateAsync(req.body);
const username=等待新承诺((res,rej)=>{
验证(value.token,process.env.PRIVATE_jwt,函数(err,解码){
if(err)rej(err);
res(已解码的用户名);
});
});
const userLookup=await UserModel.find({userName:userName});
if(userLookup==null | | userLookup.length==0){
抛出新错误(errorHandler.errors.BAD_TOKEN_PROFILE);
}
const userLookupHash=userLookup[0]。userPassword;
试一试{
//我们将其包装在try/catch中,因为rej()没有达到块级别
等待新的承诺((res,rej)=>{
bcrypt.compare(value.currentPassword、userLookupHash、函数(
犯错误
结果
) {
如果(错误){
rej(errorHandler.errors.BAD_当前密码);
}
如果(结果==真){
res();
}否则{
rej(errorHandler.errors.BAD_当前密码);
}
});
});
}捕捉(错误){
抛出新错误(err);
}
const hashPassword=等待新承诺((res,rej)=>{
bcrypt.hash(
value.newPassword,
parseInt(process.env.SALTNUMBER,10),
函数(err、hash){
if(err)rej(err);
res(散列);
}
);
});
等待UserModel.findOneAndUpdate(
{userName:userName},
{userPassword:hashPassword}
);
返回res.status(200).json({
成功:没错,
详细信息:“您的密码已成功更新”,
});
}捕捉(错误){
const{message}=err;
if(errorHandler.isUnknownError(消息)){
logger.warn({
路由:“/api/v1/changepassword”,
方法:“张贴”,
错误消息:消息,
});
}
返回res.status(200).json({
成功:错,
详细信息:errorHandler.parseError(消息),
});
}
}
models/User.js上

const mongoose=require(“mongoose”);
const errorHandler=require(“../helpers/errorHandler”);
const Schema=mongoose.Schema;
const UserSchema=新模式({
用户名:String,
userPassword:String,
userbanked:Boolean,
userType:String,
registeredDate:{type:Date,默认值:Date.now},
registeredIP:String,
lastLoginDate:{type:Date,默认值:Date.now},
lastLoginIP:String,
});
UserSchema.pre(“保存”,异步函数(){
const userExists=await UserModel.find({
用户名:this.get(“用户名”),
})
.lean()
.exec();
如果(userExists.length>0){
抛出新错误(errorHandler.errors.REGISTER\u用户名\u存在);
}
});
module.exports=mongoose.model(“用户”,UserSchema);

我已经设法修复了它。有两位公关