Node.js Express路由器无法工作。

3

我知道这个问题之前已经在这里问过,但是我找不到任何解决方案,所以我必须自己问。

这是我的app.js代码:

var express = require('express');                               
var exphbs = require('express-handlebars');
var router = express.Router();                                  


var paymentCampaigns = require('./routes/paymentCampaigns');

var app = express();

app.use('/payment-campaigns', paymentCampaigns);

//create server and listen to the port
http.createServer(app).listen(app.get('port'), function(){
    winston.log('info', 'The server has started');
});

    app.use(function(req, res, next){
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

module.exports = app;

这是paymentCampaigns.js的代码:

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

router.get('/add', function(req, res){
    res.render('add_campaign');
});

router.get('/pending', function(req, res){
    res.send('hello this is pending');
});

module.exports = router;

每当我输入localhost:8000/payment-campaigns/pending时,它会带我到404错误页面。而/add路由会带我到add_campaign页面。我做错了什么?除了这个之外,我还有其他的路由,它们都正常工作。

我粘贴了代码,除了handlebars渲染部分外,其他都是完全一样的,但我遇到了预期的挂起路由。你能把整个代码粘贴过来或者指向任何github吗?问题可能超出了这个粘贴的代码范围。 - manikawnth
你是对的。问题出在路由定义的顺序上。为了让代码更加简洁,我跳过了一些get路由,但它们导致404错误,因为路由器从未到达待处理的路由。 - codeinprogress
1个回答

1
问题出在我的代码中路由定义的方式上。挂起的路由是在最后定义的,在它之前还有一个带参数的get路由。
所以类似下面这样:
var express = require('express');
var router = express.Router();

router.get('/add', function(req, res){
    res.render('add_campaign');
});

router.get('/:campaignId', function(req,res) {
    //get the campaign detail using the campaignId
});

router.get('/pending', function(req, res){
    res.send('hello this is pending');
});

module.exports = router;

我必须将所有唯一的“get”路由移动到/:campaignId路由之前,它才开始工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接