下一个(错误)在 node.js 中不起作用

Posted

技术标签:

【中文标题】下一个(错误)在 node.js 中不起作用【英文标题】:next(err) not working in 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 在哪里定义了吗? 【参考方案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 的期望

以上是关于下一个(错误)在 node.js 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥 GET 请求在 Node.js 中不起作用?

为啥 mysql-event 在 node.js 中不起作用?

Angular js 表达式在 Node js 项目中不起作用

Node 命令似乎在 Windows 中不起作用

@font-face 在 Firefox 中不起作用 [重复]

CORS 标头在 MEAN 堆栈应用程序中不起作用