如何在expressjs/nodejs中,在同一个控制器同一个路由下开发多个get路由功能?

特克夫

我在 Node 中使用 Express 并且我有一个要求,我的客户端应用程序可以请求与以下类似的 URL

   http://localhost:3008/api/mitems/7
   http://localhost:3008/api/mitems/0/0/20
   http://localhost:3008/api/mitems/7/2/0/20    

这些请求将返回 JSON 响应。

我已将 express 配置为如下路由:

    router.get("/getbyId/:mid", mControllers.getById);
    
    router.get("/:mid/:pNo/:pSize", mControllers.getM);
    
    router.get("/:mid/:mItemId/:pNo/:pSize", mControllers.getMItems);

但这不能正常工作。我不确定如何传递多个参数,也就是说,我不确定这是否是正确的方法。是吗?

Node 会考虑router.get("/getbyId/:mid", mControllers.getById);每个不同请求的第一个api,无论我是从http://localhost:3008/api/mitems/0/0/20还是http://localhost:3008/api/mitems/7/2/0/20以两种方式调用

我应该如何在 nodejs 中重载相同的 API 函数,或者有没有更好的方法来实现这一点?

================================package.json===========================
{
  "name": "A Demos",
  "version": "1.0.0",
  "description": "a Demo",
  "main": "index.js",
  "dependencies": {
    "body-parser": "^1.19.0",
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "express-validator": "^6.12.0",
    "handlebars": "^4.7.7",
    "mysql": "^2.18.1",
    "nodemailer": "^6.6.1",
    "nodemon": "^2.0.12"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "test",
  "license": "ISC"
}

错误,我得到了一个 nodejs 端

Error: Route.get() requires a callback function but got a [object Undefined]
    at Route.<computed> [as get] (s\node_modules\express\lib\router\route.js:202:15)
    at Function.proto.<computed> [as get] (s\node_modules\express\lib\router\index.js:510:19)
    at Object.<anonymous> (s\routes\menus-routes.js:12:8)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:14)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:92:18)
    at Object.<anonymous> (s\index.js:16:21)
海科·泰森

Express 会按照您将它们添加到 的顺序考虑路由router,因此之前/:mid/:pNo/:pSize已考虑 /:mid/:mItemId/:pNo/:pSize由于请求/mitems/0/0/20不仅匹配后者,还匹配前者(带有:mid = 'mitems', :pNo = '0', :pSize = '0'),它将由 处理mControllers.getM

因此,在较短(不太具体)的路线之前添加较长(更具体)的路线,例如,

router.get("/getbyId/:mid", mControllers.getById);
router.get("/:mid/:mItemId/:pNo/:pSize", mControllers.getMItems);
router.get("/:mid/:pNo/:pSize", mControllers.getM);

getbyId航线是第一位的,因为这个词getbyId比占位更具体:mid

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

两个指令共享同一个控制器

Angular 2:共享同一个解析器的同级子路由

如何在同一个密钥的Rust HashMap中存储多个元素?

Webapi和普通方法在同一个控制器中?

在同一个地方有多个功能定义

如何在同一个正则表达式中搜索多个单词?

如何在同一个命名路由器小部件中使用多个集团

当在Xcode中按下按钮时,如何去同一个视图控制器?

如何在JavaScript中的同一个功能中使用多个按钮?

AngularJS为同一个URL路由多个ui视图?

从一个UIButton到同一个视图控制器或另一个视图控制器创建多个segue

管理同一个视图控制器的多个实例

为什么这两个路由器不能在同一个网络中工作?

如何在matlab中在同一个图形上创建多个图

存储值并在同一个控制器 Spring MVC 中再次使用

我如何在同一个函数中在 ajax 中接收多个响应

登录swift 3后如何回到同一个视图控制器?

如何正确配置路由以允许多个帖子发送到同一个 MVC 控制器?

在 Laravel 中管理同一个控制器中的不同模型

在 CodeIgniter 的 Controller 中为同一个函数设置多个路由

Codeigniter 应用:避免在同一个控制器的多个方法中重复代码

多个路由到同一个剃刀页面

如何在同一个xml文件中设置多个按钮的设计

如何在同一个数组下创建多个映射

如何在 Laravel 的同一个控制器中返回 POST 请求和视图?

如何在nodeJs中将2个逻辑块放在同一个异步路由中?

asp.net core swashbuckle 如何在同一个控制器中使用版本控制

在同一个 AKS 集群中安装多个 nginx 入口控制器实例

MERN 分页和过滤在同一个控制器中