2017-03-26 47 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 Ahhh我不知道。我的理解是,只有在路由器中傳遞下一個(err)時纔會調用它。刪除它可以解決問題。我將有更復雜的邏輯,我需要在每個路由器中使用「默認」錯誤處理程序,然後爲每個路由器執行此操作嗎? – user2924127

回答

2

我不知道,如果你有更多的代碼或沒有,但你需要安裝你的路由器與app.use('/', router)。您需要安裝body-parser middleware才能解析req.body

你的整個應用程序應該是這個樣子:

// 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