【问题标题】:next(err) not working in node.js下一个(错误)在 node.js 中不起作用
【发布时间】:2017-07-28 14:03:37
【问题描述】:

我的next(err) 无法正常工作。它忽略错误并仅加载页面而不是发送 HTTP 状态代码 404。

ldap 搜索工作正常,结果符合预期。当 else 语句被命中时,它只是不返回错误。 控制台确实在日志中显示failed

app.use(function(req, res, next){
    conn.search('dc=foo', opts, function (err, res) {

        assert.ifError(err)
        var entries = []

        res.on('searchEntry', function (entry) {

            entries.push(entry.object)
        })

        res.on('end', function (result) {

            conn.unbind(function (err) {

                console.log('Disconnecting')

                if (entries.length == 1) {
                    next()
                } else {
                    console.log('fail')
                    var err = new Error('Permission Denied')
                    err.status = 404
                    next(err)
                }
            })
        })
    })
})

【问题讨论】:

  • 嗯,这是一个不错的 4 级深度回调地狱。你确定res.on('end') 应该在res.on('searchEntry') 里面吗?
  • 哈哈是的,我的错误在于输入不是 cp/paste。而且我似乎总是在这里弄乱缩进
  • res.on('end') 仍在 res.on('searchEntry')... 如果您给我们错误的代码,没有人可以帮助我们
  • 伙计,在重新输入时错过某些内容是一个很容易犯的错误。
  • 我知道,但是您正在寻求帮助,却没有给我们正确的代码,所以...¯\_(ツ)_/¯ 现在这是正确的代码,那么next 在哪里定义了吗?

标签: javascript node.js error-handling next


【解决方案1】:

我不认为next 那样工作。如果您不想调用下一个中间件,请不要调用 next(error)next()。改用:

if (entries.length == 1) {
     next()
} else {
     console.log('fail')
     return res.status(404).send('Permission Denied')
}

【讨论】:

  • 谢谢,但使用 TypeError: res.status is not a function 会导致应用程序崩溃
  • 那你做错了,因为res.status()肯定是express API的一部分。
  • 我不是说不是,我没有做错任何事情,我遵循了 ldapjs。我的搜索有效。由于某种原因,这只是行不通。所以风中的态度。如果成功了,我就不会在这里了,对吧?
  • 哇,伙计不要那么敏感 :) 尽管你认为你没有做错什么,但你做错了什么,因为 1) 你的代码没有t 工作,2) res.status 是 API 的一部分,所以它应该被定义,所以你没有传递正确的 res 对象。我只是说显而易见的,而不是在这里侮辱你。
  • 我正在拉入正确的 res 对象,正如我在 console.log(res.status) 中看到的那样,它给了我一个 0,这是我对 ldapjs 的期望
猜你喜欢
  • 2019-03-02
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多