2017-01-31 3 views
0

Ich habe ein paar einfache Routen, die ich falsch konfiguriert habe und nicht sicher warum.Express-Routen zurück 404s

app.js:

//app setup 
var http = require('http'); 
var bodyParser = require('body-parser'); 
var express = require('express'); 
var routes = require('./routes'); 
var agent = require('./routes/agent'); 
var config = require('./config'); 
var app = express(); 


app.server = http.createServer(app); 

app.use(bodyParser.json({ 
    limit : config.bodyLimit 
})); 

app.use(bodyParser.urlencoded({ 
    extended : true 
})); 

app.use('/v1', routes); 
app.use('/v1/agent', agent); 

app.server.listen(config.port); 

console.log('API listening on port ' + app.server.address().port); 

module.exports = app; 

Dies gibt Antworten auf dem /v1/ Route (index.js):

'use strict'; 

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

router.get('/', function (req, res) { 
    res.status(403).json({ 
     message: 'Invalid request.' 
    }); 
}); 

module.exports = router; 

im Agenten Route, ich habe eine POST-Handler, der korrekt behandelt wird um /v1/agent/login. Aber während ein an /v1/agent/ Werke weitergeleitet erhalten, erhalten eine geroutet /v1/agent/123 liefert ein 404:

'use strict'; 
var agentController = require('../controller/agent.js'); 
var express = require('express'); 
var router = express.Router(); 

function handleError(objError, res) { 
    res.status(500).json({ errorMessage : objError.message }); 
} 

router.get('/', function (req, res) { 
    res.status(200).json({ 
     message: 'OK' // works fine 
    }); 
}); 

router.get('/:id'), function (req, res) { 
    var agentNum = req.params.id; 
    res.send(req.params); // 404 here 

    try { 
     //res.status(200).json({ message: 'hello agent.'}); 
    } catch (err) { 
     // handleError(err, res); 
    } 
}; 


router.post('/login', function (req, res) { 
    var agentNum, password; 
    // works fine 
}); 

router.post('/pwr', function (req, res) { 
    //also works fine 
}); 
module.exports = router; 

Mein Verständnis ist, dass die app.use Methode, um die Route umleiten sollte und alle GET-Anfragen angehängt zu dieser Strecke zu der, die ich festgelegt (Agent), also warum versagt der mit Params, während der Root erfolgreich ist?

Vielen Dank

+0

nicht sicher, ob dies ist nicht nur in Ihrem Schnipsel enthielt, aber ich habe nicht ein 'module.exports = router' in Ihren ** Routen/Agent ** Datei – LostJon

+0

@LostJon Entschuldigung - Ja, es ist vorhanden (nur ein Versehen von meinem Schnipsel) –

+0

Ändern Sie die Reihenfolge der Routen, Ort 'app.use ('/ v1/Agent', Agent);' vor 'app .use ('/ v1', routes); 'So:' app.use ('/ v1/agent', agent); app.use ('/ v1', Routen); ' –

Antwort

3

Sie geben den Rückruf nicht korrekt weiter.

router.get ('/: id' )

router.get('/:id', function(req, res) { 
    var agentNum = req.params.id; 
    res.send(req.params); // 404 here 

    try { 
     //res.status(200).json({ message: 'hello agent.'}); 
    } catch (err) { 
     // handleError(err, res); 
    } 
}); 
+2

holy mist. Der einzige Trost, den ich hier empfinde, ist zu wissen, dass zwei andere Leute es auch zuerst vermisst haben. –

+2

Wahr In der Tat. Nun, wir drei haben heute/heute Abend etwas Neues gelernt. –

Verwandte Themen