2017-03-26 14 views
0
var express = require('express'); 
var router = express.Router(); 

router.post("/", function(req, res, next) { 
console.log('Yes1'); 
if(!req.body.username || !req.body.password){ 
    console.log('Yes2'); 
    return res.status(401).json(JSON.stringify({ 
     error: 'Username or Password are not set' 
    })); 

}else{ 
console.log('Yes3'); 
return res.status(200).json(JSON.stringify({ 
     data: 'Okay' 
    })); 
} 


//error handler 
router.use(function(err, req, res, next) { 
    res.status(500).json(JSON.stringify({ 
     error: err 
    })); 
}); 

module.exports = router; 

フロントエンドから私はユーザー名とパスワードを送信しています。私はどちらかのエラー200または401を受信する予定です。何らかの理由で、私はデフォルトのエラーハンドラであるエラー500を受け取っています。私はここにどのように来ているのか分かりません。私のサーバーコンソールでYes1とYes2が印刷されているので、なぜエラー401が表示されないのですか?常にエラー500を返す

+0

@bejadoああ私はそれを知らなかった。私の理解は、ルータでnext(err)が渡された場合にのみ呼び出されます。それを削除すると問題が解決されます。私は、各ルータに「デフォルト」のエラーハンドラが必要な、より複雑なロジックを持っています。これを各ルータで行う方法はありますか? – user2924127

答えて

2

にステータスをリセットしているように見えますあなたのルータはapp.use('/', router)です。

req.bodyを解析できるようにするには、body-parser middlewareもインストールする必要があります。

あなたのアプリケーション全体は次のようになります。

// router.js 

var express = require('express'); 
var router = express.Router(); 

router.post("/", function(req, res, next) { 
    console.log('Yes1'); 
    console.log(req.body); 
    if(!req.body.username || !req.body.password){ 
    console.log('Yes2'); 
    return res.status(401).json(JSON.stringify({ 
     error: 'Username or Password are not set' 
    })); 

    }else{ 
    console.log('Yes3'); 
    return res.status(200).json(JSON.stringify({ 
     data: 'Okay' 
    })); 
    } 
}); 

//error handler 
router.use(function(err, req, res, next) { 
    res.status(500).json(JSON.stringify({ 
     error: err 
    })); 
}); 

module.exports = router; 

// server.js 

var express = require('express'); 
var bodyParser = require('body-parser'); 
var customRouter = require('./router.js'); 
var app = express(); 

app.use(bodyParser.json()); // for parsing application/json 
app.use('/', customRouter); 

app.listen(3000, function() { 
    console.log('Listening on port 3000...'); 
}); 

error handlingroutingドキュメントを参照してください。

0

あなたがより多くのコードかを持っている場合、私は知りませんが、あなたがインストールする必要が401エラーであるので、あなたのミドルウェア・ハンドラが、発射され、そしてあなたが500

関連する問題