2017-03-26 3 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