2017-07-28 73 views
0

我有问题,我的next(err)不起作用。它忽略错误,只是加载页面,而不是发送HTTP状态码404。下一个(err)在node.js中不工作

ldap搜索正常工作,结果看起来和预期的一样。当else语句被命中时,它不会返回错误。 控制台的确显示日志

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) 
       } 
      }) 
     }) 
    }) 
}) 
+0

嗯,这是一个很好的4级深回调地狱。你确定'res.on('end')'应该在'res.on('searchEntry')'里面吗? –

+0

哈哈是啊,我的坏是输入不CP /浆糊。我总是在这里弄脏缩进 – H30

+0

'res.on('end')'仍然在'res.on('searchEntry')'内......如果你给我们错误的代码,没人会帮忙的 –

回答

0

failed我不认为next作品那样。如果您不希望调用下一个中间件,请根本不要调用next(error)next()。改为使用:

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

谢谢,但崩溃应用与TypeError:res.status不是一个函数 – H30

+0

然后你做错了什么,因为'res.status() '绝对是[express API]的一部分(http://expressjs.com/en/api.html)。 –

+0

我不是说它不是,我没有做任何错误我跟着ldapjs。我的搜索工作。这只是因为某些原因不起作用。所以风的态度。如果它工作,我不会在这里正确的? – H30