如何使参数在节点JS rest API中可选

我们需要公开REST端点。 有三个参数,如何使这些可选。 要求是应该与这些参数中的任何一个一起工作。

例如http://server:port/v1/api/test-api/userId/UnameName/userEmail

 app.get('v1/api/test-api/:userId/:userName/:userEmail', function(req, res){ }); 

当我们通过传递所有三个参数,它工作正常。 但是我们想通过只传递userId或这三个参数中的任何一个来使其工作。 当我们传递更less的参数给它的错误Cannot GET /v1/api/test-api/test5/123

如何在暴露端点时使参数可选?

你需要像这样构build路线:

 app.get('path/:required/:optional?*, ...) 

更好的解决scheme是使用GET参数,例如调用

 http://server:port/v1/api/test-api?userId=123&userName=SomeKittens&userEmail=kittens%40example.com 

然后你可以定义你的路线,如:

 app.get('v1/api/test-api', function(req, res){ var userName = req.query.userName; var userEmail = req.query.userEmail; var userId = req.query.userId; // Do stuff }); 

不要忘记包含body-parser ( 例子 )

试图给@ thebiglebowsy的答案增加更多的清晰度,你可以使用:

必填项 – >必填项1 /必填项2 / …

可选 – >?可选/可选2 / ..

但是,我的build议是为每个可能性生成一条路线:

v1/api/test-api/:userId/

v1/api/test-api/:userId/:userName

v1/api/test-api/:userId/:userName/:userEmail

我有几个使用可选路线的问题

可选方法是,您可以检查在input请求参数中是否收到了相应的validation码或采集值。

 app.post('/v1/api/test-api', function(req, res) { var parameters = []; if(req.body.userName !== undefined) { //DO SOMEHTING parameters.push({username: req.body.userName}); } if(req.body.userId !== undefined) { //DO SOMEHTING parameters.push({userId: req.body.userId}); } if(req.body.userEmail !== undefined) { //DO SOMEHTING parameters.push({userEmail: req.body.userEmail}); } res.json({receivedParameters: parameters}); });