2017-03-26 8 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; 

Vom Frontend sende ich einen Benutzernamen und ein Passwort. Ich erwarte, entweder Fehler 200 oder 401 zu empfangen. Aus irgendeinem Grund obwohl ich Fehler 500 empfange, der der Standardfehlerhandler ist. Ich bin mir nicht sicher, wie es hierher kommt. Auf meiner Serverkonsole werden Yes1 und Yes2 gedruckt, also warum bekomme ich keinen Fehler 401?Immer 500 Fehler

+0

@bejado Ahhh das wusste ich nicht. Mein Verständnis war das wird nur aufgerufen, wenn der nächste (err) im Router übergeben wird. Durch das Entfernen wird das Problem behoben. Ich werde eine komplexere Logik haben, bei der ich einen 'Standard'-Fehlerhandler in jedem Router benötige, gibt es eine Möglichkeit, dies dann für jeden Router zu tun? – user2924127

Antwort

2

Ich weiß nicht, wenn Sie mehr Code haben oder nicht, aber Sie müssen installieren Ihr Router mit app.use('/', router).

Sie müssen auch body-parser middleware installieren, um req.body analysieren zu können.

Ihre gesamte Anwendung sollte wie folgt aussehen:

// 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...'); 
}); 

Siehe error handling und routing Dokumentation.

0

Es scheint, dass Ihre Middleware-Handler feuert, weil 401 ein Fehler ist, und Sie das Zurücksetzen des Status 500.