Nodejs表达多个参数不能正常工作

时间:2016-06-09 06:25:12

标签: javascript node.js express

我想从nodejs express中获取两个参数但是当我在下面定义参数时,我遇到了一个问题,我无法解决它。我的代码是用于路由的代码:

app.use('/api/upcomingEvents/:trader/:id', require('./api/upcomingEvent'));
/* ther are inside of upocomingEvent/index.js */
var express = require('express');
var controller = require('./upcomingEvent.controller');
var router = express.Router();
router.get('/:trader/:id', controller.index);

当我根据定义的路由发送请求时,它会给我第一个参数。例如:

http://www.sitename.com/api/upcomingEvents/firstTrader/1

对于此路径表达参数,例如{trader:1,id:undefined}

如果我改变这样的路径:

http://www.sitename.com/api/upcomingEvents/blablabla/firstTrader/1

它返回我想要的参数:{trader:'firstTrader',id:1}

我该如何解决这个问题?

api / UpcomingEvent / index.js:

var express = require('express');
var controller = require('./upcomingEvent.controller');

var router = express.Router();

router.get('/:trader', controller.index);
router.get('/:trader/:id', controller.index);
router.post('/:trader', controller.index);
router.post('/:trader/:id', controller.index);
module.exports = router;

API / upcomingEvent / upcomingEvent.controller.js:

'use strict';
  // Gets a list of UpcomingEvents
exports.index = function(req, res) {
    console.log(req.params);
    res.send(200,"ok!"); return;
};

1 个答案:

答案 0 :(得分:2)

api/upcomingEvent.js中,您再次声明相同的参数。实质上,您正在创建匹配此的路线:

/api/upcomingEvents/:trader/:id/:trader
/api/upcomingEvents/:trader/:id/:trader/:id

请改为尝试:

// app.js
app.use('/api/upcomingEvents', require('./api/upcomingEvent'));

// api/upcomingEvent.js
router.get ('/:trader',     controller.index);
router.get ('/:trader/:id', controller.index);
router.post('/:trader',     controller.index);
router.post('/:trader/:id', controller.index);

由于:id是可选的,您甚至可以将其缩短为:

router.get ('/:trader/:id?', controller.index);
router.post('/:trader/:id?', controller.index);