2017-01-31 175 views
0

我有一些簡單的路由,我錯誤配置,不知道爲什麼。快速路由返回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; 

這將返回/v1/路線上的反應(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; 
在代理路線

,我有被正確處理的POST處理程序在/v1/agent/login。但同時在/v1/agent/作品被路由,一個被路由到/v1/agent/123返回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; 

我的理解是,app.use方法應該重定向路徑和附加到路徑到我指定的任何GET請求(代理程序),那麼爲什麼帶有參數的程序失敗而根程序成功?

謝謝

+0

不知道這是否只是沒有包括的您的片斷,但我沒有看到一個'module.exports = router'在**路/代理**文件 – LostJon

+0

@LostJon對不起 - 是,它存在(只是從我的片段中的疏忽) –

+0

改變路線的順序,放'app.use('/ v1/agent',agent);''在'app之前.use('/ v1',routes);'像這樣:'app.use('/ v1/agent',agent); app.use('/ v1',routes);' –

回答

3

您沒有正確傳遞迴調。

router.get( '/:身份證'

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

聖潔的廢話。我唯一的安慰就是知道另外兩個人一開始也錯過了。 –

+2

確實的確,我們三人今天/今晚學到了新東西。 –