如何使用猫鼬跳过文档?

时间:2020-06-08 09:30:30

标签: angular mongodb express

嗨,我在用mongoose nodejs express和angular。我有从中获取所有存储在数据库中的所有用户详细信息的api,但是我想跳过登录或注册的用户详细信息。如何跳过特定的用户详细信息。请帮助我解决这个问题。我是angel的新手,所以请帮助我习惯一下angular并解决问题。

这是我的api.js

function verifyToken(req, res, next) {
    if (!req.headers.authorization) {
        return res.status(401).send('Unauthorized request')
    } 
    let token = req.headers.authorization.split(' ')[1]
    if ( token === 'null') {
        return res.status(401).send('Unauthorized request') 
    }
    let payload = jwt.verify(token, 'secretKey')
    if (!payload) {
        return res.status(401).send('Unauthorized request') 
    }
    req.userId = payload.subject
    next()
}

router.get('/', (req, res) => {
    res.send('From API routes')
})

router.post('/register', (req, res) => {
    let userData =
     req.body
    let user = new User(userData)
    user.save((error, registerdUser) => {
        if (error) {
            console.log(error)
        } else {
            let payload = { subject: registerdUser._id}
            let token = jwt.sign(payload, 'secretKey')
            res.status(200).send({token})
        }
    })
})

router.post('/login', (req, res) => {
    let userData = req.body
    User.findOne({username: userData.username}, (error, user) => {
        if (error) {
             console.log(error)
        } else {
            if (!user) {
                res.status(401).send('Invalid username')
            } else
            if ( user.password !== userData.password) {
                res.status(401).send('Invalid password')  
            } else {
                let payload = { subject: user._id}
                let token = jwt.sign(payload,'secretKey')
                res.status(200).send({token})
            }
        }
    })
})

router.get('/menu', verifyToken, (req, res) => {
    let userData = req.body 
})

router.post('/doner',  (req, res) => {
    User.find({}, (error, user) => {
        if (error) {
             console.log(error)
        } else {
            res.status(200).send(user)
        }
    })
})

router.post('/search',  (req, res) => {
    let userData = req.body
    User.find({bloodgroup: userData.bloodgroup}, (error, user) => {
        if (error) {
             console.log(error)
        } else {
            res.status(200).send(user)
        }
    })
})

router.post('/forgotPswrd', (req, res) => {
    let userData =req.body
    User.findOne({email: userData.email}, (error,user) => {
        if (error) {
            console.log(error)
       } else 
           if (!user) {
               res.status(401).send('Email Does not exists')
           } else {
           res.status(200).send(user._id)
           }
       })
})

router.post('/reset', (req,res) => {
    let userData= req.body

   User.updateOne({_id: user._id, $set: {password: userData.password}}, (error, user) => {
        if (error) {
            console.log(error)
       } else {
          
           res.status(401).send(user)
       }
       })
})
router.post('/doner',  (req, res) => {
    User.find({}, (error, user) => {
        if (error) {
             console.log(error)
        } else {
            res.status(200).send(user)
        }
    })
})

1 个答案:

答案 0 :(得分:0)

使用verifyToken中间件对请求进行身份验证,然后将userId存储在req对象中。

对于数据库查询,请使用$ne查询运算符来选择其ID不是当前登录用户ID的所有用户。

router.post('/doner', verifyToken, (req, res) => {
  // Extract the `userId` from the req object
  const userId = req.userId;
  User.find({ $ne: userId }, (error, user) => {
      if (error) {
           console.log(error);
      } else {
          res.status(200).send(user);
      }
  });
});
相关问题