我想从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;
};
答案 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);