2017-01-31 150 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

确实的确,我们三人今天/今晚学到了新东西。 –