休息与Express.js嵌套路由器

编程入门 行业动态 更新时间:2024-10-26 10:29:28
本文介绍了休息与Express.js嵌套路由器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

假设我想要具有如下的REST端点:

Suppose I want to have REST endpoints which look roughly like this:

/user/ /user/user_id /user/user_id/items/ /user/user_id/items/item_id

每个CRUD都有意义。例如,/ user POST创建一个新用户,GET获取所有用户。 / user / user_id GET只能获取一个用户。

CRUD on each if makes sense. For example, /user POST creates a new user, GET fetches all users. /user/user_id GET fetches just that one user.

项目是用户特定的,所以我把它们放在 user_id ,这是一个特定的用户。

Items are user specific so I put them under user_id, which is a particular user.

现在做出快速路由模块化我做了几个路由器实例。有一个用户的路由器和该项目的路由器。

Now to make Express routing modular I made a few router instances. There is a router for user, and a router for the item.

var userRouter = require('express').Router(); userRouter.route('/') .get(function() {}) .post(function() {}) userRouter.route('/:user_id') .get(function() {}) var itemRouter = require('express').Router(); itemRouter.route('/') .get(function() {}) .post(function() {}) itemRouter.route('/:item_id') .get(function() {}) app.use('/users', userRouter); // Now how to add the next router? // app.use('/users/', itemRouter);

URL到项目是URL的后代用户的层次结构。现在如何使用 / users 获取URL,而不是使用userRouter,但是更具体的 / user / * user_id * / items / 到itemRouter?另外,如果可能的话,我也希望可以对itemRouter使用user_id。

URL to item is descendents of the URL hierarchy of the user. Now how do I get URL with /users whatever to userRouter but the more specific route of /user/*user_id*/items/ to the itemRouter? And also, I would like user_id to be accessible to itemRouter as well, if possible.

推荐答案

可以通过连接来嵌套路由器作为其他路由器上的中间件,带或不带 params 。

You can nest routers by attaching them as middleware on an other router, with or without params.

如果您要访问<$ c $,则必须将 {mergeParams:true} c> params 从父路由器。

You must pass {mergeParams: true} to the child router if you want to access the params from the parent router.

mergeParams 已在快乐 4.5.0 (2014年7月5日)

mergeParams was introduced in Express 4.5.0 (Jul 5 2014)

这个例子 itemRouter 附加到 / code> /:userId / items 路线

这将导致以下可能的路线:

This will result in following possible routes:

GET / user - > hello user GET / user / 5 - > hello user 5 GET / user / 5 / items - > 来自用户5的hello项目 GET / user / 5 / items / 6 - > hello第6项来自用户5

GET /user -> hello user GET /user/5 -> hello user 5 GET /user/5/items -> hello items from user 5 GET /user/5/items/6 -> hello item 6 from user 5

var express = require('express'); var app = express(); var userRouter = express.Router(); // you need to set mergeParams: true on the router, // if you want to access params from the parent router var itemRouter = express.Router({mergeParams: true}); // you can nest routers by attaching them as middleware: userRouter.use('/:userId/items', itemRouter); userRouter.route('/') .get(function (req, res) { res.status(200) .send('hello users'); }); userRouter.route('/:userId') .get(function (req, res) { res.status(200) .send('hello user ' + req.params.userId); }); itemRouter.route('/') .get(function (req, res) { res.status(200) .send('hello items from user ' + req.params.userId); }); itemRouter.route('/:itemId') .get(function (req, res) { res.status(200) .send('hello item ' + req.params.itemId + ' from user ' + req.params.userId); }); app.use('/user', userRouter); app.listen(3003);

更多推荐

休息与Express.js嵌套路由器

本文发布于:2023-11-25 17:14:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1630633.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:嵌套   路由器   Express   js

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!