中间能见度的一个令(节点JS)

0

的问题

鉴于以下的路由器的方案:

router.get('/A', [returns password])
router.get('/B', [returns no password])

什么,应当正确的中间件看起来像是返回的密码根据路线?

我尝试这样的:

function passwordCheck(req, res, next) {
  let user= req.body_id
  User.findOne({_id: id}).select('+password').exec(function(err, result) {
    if (err) {
      console.log("error: " + err)
    } else {

      console.log("okay.");
      res.send(result)
    }
  })
}
express javascript mongoose router
2021-11-22 11:51:13
1

最好的答案

0

你可以创建类似于中间件工厂:

const checkPassword = (returnPassword = false) => {
    return (req, res, next) => {
        User.findOne({_id: req.body_id })
        .select('+password')
        .exec((err, result) => {
            if (err) {
                console.error(err);
                return res.status(500).send() // End of request on error?
            } else {
                const password = result['password'] // get your password this way or somehow else
                if (returnPassword) {
                    // Store password in request if returnPassword=true 
                    res.locals.userPassword = password;
                } 
                next();
            }
        })
    }
}

使用:

router.get('/A', checkPassword(true), routeA)
router.get('/B', checkPassword(false), routeB)

访问在路线:

router.get('/', (req, res) => {
  console.log(res.locals.userPassword) // Actual password for /A, undefined for /B
});

还检查了表达文档: 编写中间用于快速应用程序的 理解是什么 next 及它是如何工作(我注意到你没有利用它在你的尝试).
此外,我猜你有几个错别字:

  • select('+password') -你确定加是必要的?
  • findOne({_id: id}) -应该是 findOne({_id: user})? 或者为什么你一定义 user 否则?

P.S....永远不会忘记处理错误:)

2021-11-22 14:23:19

我可以添加的,即我们应该尽量储存的变量喜欢的东西 res.locals 而不是直接 req. 这种习惯可替代的重要变量 req 对象。
Someone Special

@SomeoneSpecial同意,感谢您的小费! 我更新我的代码
Xeelley

我几乎没有: if(!req.body.userID && !req.body.userName && !req.body.password) { let so userService.getUsers(function(error, users) { for(let i = 0; i < users.length; i++){ console.log(users[i].noPassword) so=users[i].noPassword() console.log(so) /* res.write(so) */ res.write(toString(so)) } res.end() }) } 我迭代过mongoose的目的和清除在每一个密码。 但是 怎么 做的我把这些新的对象回收藏?
pawl123

@pawl123请。 不用意见对于大型代码段(为便于阅读,目的),更好地更新你的答案。
Xeelley

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................