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

use*_*291 2 rest node.js node-request

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

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

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

});
Run Code Online (Sandbox Code Playgroud)

当我们通过传递所有三个参数调用它工作正常.但我们希望通过仅传递userId或这三个参数中的任何一个来使其工作.当我们传递较少的参数时,给出错误Cannot GET /v1/api/test-api/test5/123

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

the*_*i11 6

你需要像这样构建路线:

app.get('path/:required/:optional?*, ...)
Run Code Online (Sandbox Code Playgroud)


Som*_*ens 5

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

http://server:port/v1/api/test-api?userId=123&userName=SomeKittens&userEmail=kittens%40example.com
Run Code Online (Sandbox Code Playgroud)

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

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
});
Run Code Online (Sandbox Code Playgroud)

别忘了包括body-parser(例子)