Node.js TypeError:this.findOne不是函数
我试图使用get方法从mongodb获取用户数据,但它不断地给我一个错误,即Node.js TypeError:this.findOne不是函数,node.js,mongodb,Node.js,Mongodb,我试图使用get方法从mongodb获取用户数据,但它不断地给我一个错误,即user。findOne不是函数用户令牌,id get成功,但findOne不起作用,我对用户架构使用了静态方法。请在这方面帮助我。多谢各位 代码如下: //userController.js Router.get("/user",(req,res,next)=>{ var token=req.header("x-auth"); console.log("token3: "+token);
user。findOne
不是函数用户令牌,id get成功,但findOne
不起作用,我对用户架构使用了静态方法。请在这方面帮助我。多谢各位
代码如下:
//userController.js
Router.get("/user",(req,res,next)=>{
var token=req.header("x-auth");
console.log("token3: "+token);
console.log(User);
User.findUserByToken(token).then((then)=>{
if(!User){
Promise.reject();
}else{
req.user=user;
req.token=token;
next();
}
}).catch((error)=>{
res.status(401).send();
});
},(req,res)=>{
res.send(req.user).then(()=>{
}).catch(()=>{
});
})
//user.js
const Schema=mongoose.Schema;
const userSchema=new Schema({
name:{
type: String,
trim: true,
required: true,
minlength: 6
},
email:{
type:String,
unique:true,
trim: true,
required: true,
minlength: 6
},
password:{
type: String,
trim: true,
required: true,
minlength: 8
},
tokens:[
{
access:{
type:String,
required:true
},
token:{
type:String,
required:true
}
}
]
});
userSchema.statics.findUserByToken=(token)=>{
const User= this;
console.log(User);
let decoded;
try{
decoded=jwt.verify(token,"asdfghjkl");
}catch(e){
return Promise.reject();
}
this.findOne({
"_id":decoded._id,
"tokens.token":token,
"tokens.access":"auth"
}).then((data)=>{
return data;
})
}
const User=mongoose.model('users',userSchema);
module.exports={User}
以下是邮递员的错误:
TypeError: this.findOne is not a function
at Function.userSchema.statics.findUserByToken (D:\react-native\reactNativeBackend\models\user.js:123:10)
at D:\react-native\reactNativeBackend\controllers\userController.js:47:10
at Layer.handle [as handle_request] (D:\react-native\reactNativeBackend\node_modules\express\lib\router\layer.js:95:5)
at next (D:\react-native\reactNativeBackend\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (D:\react-native\reactNativeBackend\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (D:\react-native\reactNativeBackend\node_modules\express\lib\router\layer.js:95:5)
at D:\react-native\reactNativeBackend\node_modules\express\lib\router\index.js:281:22
at Function.process_params (D:\react-native\reactNativeBackend\node_modules\express\lib\router\index.js:335:12)
at next (D:\react-native\reactNativeBackend\node_modules\express\lib\router\index.js:275:10)
at Function.handle (D:\react-native\reactNativeBackend\node_modules\express\lib\router\index.js:174:3)
at router (D:\react-native\reactNativeBackend\node_modules\express\lib\router\index.js:47:12)
at Layer.handle [as handle_request] (D:\react-native\reactNativeBackend\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\react-native\reactNativeBackend\node_modules\express\lib\router\index.js:317:13)
at D:\react-native\reactNativeBackend\node_modules\express\lib\router\index.js:284:7
at Function.process_params (D:\react-native\reactNativeBackend\node_modules\express\lib\router\index.js:335:12)
at next (D:\react-native\reactNativeBackend\node_modules\express\lib\router\index.js:275:10)
这在文件中有说明: 不要使用ES6箭头函数(=>)声明静态。箭头函数 显式阻止绑定此 因此,您需要将箭头函数更改为函数表达式:
userSchema.statics.findUserByToken = function (token) {
const User = this;
console.log(User);
let decoded;
try {
decoded = jwt.verify(token, "asdfghjkl");
} catch (e) {
return Promise.reject();
}
this.findOne({
"_id": decoded._id,
"tokens.token": token,
"tokens.access": "auth"
}).then((data) => {
return data;
})
}
这在文件中有说明: 不要使用ES6箭头函数(=>)声明静态。箭头函数 显式阻止绑定此 因此,您需要将箭头函数更改为函数表达式:
userSchema.statics.findUserByToken = function (token) {
const User = this;
console.log(User);
let decoded;
try {
decoded = jwt.verify(token, "asdfghjkl");
} catch (e) {
return Promise.reject();
}
this.findOne({
"_id": decoded._id,
"tokens.token": token,
"tokens.access": "auth"
}).then((data) => {
return data;
})
}
const User=this代码>初始化是否正确??或者像这样尝试User.findOne
,通过注释您的第一行初始化,我也会检查User.findOne是否仍然存在相同的错误。。TypeError:User.findOne不是函数const User=this代码>初始化是否正确??或者像这样尝试User.findOne
,通过注释您的第一行初始化,我也会检查User.findOne是否仍然存在相同的错误。。TypeError:User.findOne不是一个函数我遇到了相同的问题,感谢您提醒箭头函数阻止绑定。棘手的小细节。干杯。我也遇到了同样的问题,谢谢你提醒我箭头函数可以防止绑定。棘手的小细节。干杯