在URL中使用多个参数,静态URL之间的参数不可用

时间:2016-04-01 07:16:19

标签: node.js express body-parser

我使用express.js(v 4.13.4),node.js(v 0.12.5)和body-parser(v 1.13.2)创建一个简单的聊天RESTful API。

我有这个url路径,必须由用户调用: http://myhost/chat/room/:roomId/message/:messageId

Body-parser设置如下:

var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

我无法读取第一个网址参数:roomId,但:messageId可用。 我在请求回调函数中使用req.params.roomIdreq.params.messageId访问这些参数。

问题:

  1. 在网址中间放置参数是错误的吗?
  2. 为什么应用程序不会解析:roomId

3 个答案:

答案 0 :(得分:0)

参数roomId等作为查询参数发送,因此需要req.params.roomId才能获取。

另一种方法是将params作为正文发送,这样URL将是干净的,然后访问params body-parser是必需的。 要发送正文中的参数,请通过邮递员创建一个帖子请求并在那里指定参数。refer this for sending params in body

答案 1 :(得分:0)

这是我的工作。

var app = require('express')();
var bodyParser= require('body-parser');

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.get('/chat/room/:roomId/message/:messageId', function(req, res){
   console.log('Room Id: '+req.params.roomId);
   console.log('Message Id: '+req.params.messageId);

   res.sendStatus(200);
});


app.listen(3000);

现在,如果我尝试访问localhost:3000/chat/room/1/message/100,我会

Room Id: 1
Message Id: 100

请检查 roomId 的拼写。可能是错字可能是问题。

答案 2 :(得分:0)

感谢Mukesh Sharma和Himani Agrawal的回答。 我现在发现了这个问题,现在是:

如果我注册这样的房间路由器:

:roomId

:messageId:roomId会被收到。

但是,如果我像这样注册房间路由器(就像我发布错误时那样)var RoomRouter = express.Router(); RoomRouter.get('/message/:messageId', function(req, res) { console.log('Room Id: '+req.params.roomId); console.log('Message Id: '+req.params.messageId); res.status(200); res.send("Ok"); }); app.use('/chat/room/:roomId', RoomRouter); 不可用。

{{1}}

这是我的问题,我不确切地知道为什么在两种不同的情况下会对url进行不同的解析,但我确信这在某处有逻辑。