我使用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.roomId
和req.params.messageId
访问这些参数。
问题:
:roomId
?答案 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进行不同的解析,但我确信这在某处有逻辑。