如何使参数在节点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}); });