2017-07-28 14 views
0

私はnext(err)が動作していないという問題があります。エラーを無視し、HTTPステータスコード404を送信する代わりにページをロードするだけです。next(err)がnode.jsで動作しない

ldap検索は正常に動作し、結果は期待通りに見えます。 elseステートメントがヒットしたときにエラーを返すだけではありません。 コンソールは、私はそのようなnext作品を考えていないログ

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

haha​​ yea my badがcp/pasteに入力されていませんでした。そして、私はいつもここでインデントを混乱させるようです。 – H30

+0

'res.on( 'end')'はまだ 'res.on( 'searchEntry')の中にあります...あなたが私たちに間違ったコードを与えると誰も助けることができません –

答えて

0

failedを示しています。次のミドルウェアを呼びたくない場合は、next(error)またはnext()に電話をかけないでください。代わりに次のように使用してください:

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

ありがとうございます。しかし、 '' TypeError:res.status is not function'''でアプリをクラッシュさせます。 '' – H30

+0

'' res.status() 'は間違いなく[express API](http://expressjs.com/en/api.html)の一部です。 –

+0

イムは間違っていると言っているわけではありません。私の検索は動作します。それは何らかの理由で機能しません。その姿勢で風が強い。それがうまくいくなら私はここにいらないだろう? – H30

関連する問題