Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 TypeError:this.findOne不是函数_Node.js_Mongodb - Fatal编程技术网

Node.js TypeError:this.findOne不是函数

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);

我试图使用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);
    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不是一个函数我遇到了相同的问题,感谢您提醒箭头函数阻止绑定。棘手的小细节。干杯。我也遇到了同样的问题,谢谢你提醒我箭头函数可以防止绑定。棘手的小细节。干杯