在 Express 中,我的路由目录中的 router.get('/') 如何处理除 '/' 以外的请求?
In Express, how does router.get('/') in my routes directory handle requests other than '/'?
在 app.js 我有:
const routes = './routes/'
const usersRouter = require(routes +'users');
/*more code*/
app.use('/users', usersRouter);
在users.js中,我有:
const express = require('express');
const router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
module.exports = router;
我的问题:router.get('/')
如何知道获取用户文件?通常我需要将 '/users'
传递给 router.get(
。但是 app.js 中的 app.use('/users'
,我只需要 users.js 中的 router.get('/')
。事实上,如果我在 users.js 中键入 router.get('/users'
,程序就会中断。
Learning Express,我可以解释它是如何工作的。
当你这样做时:
app.use('/users', usersRouter);
这已经过滤为仅将以 /users
开头的请求发送到路由器。它还从路径的开头剥离 /users
,因此路由器本身将在已从中剥离 /users
的简化路径上进行匹配,对于 /users
将只是 /
.对于像 /users/something
这样的 URL,路由器将匹配 /something
.
因此 router.get("/", ...)
将匹配 /users
的原始 URL,而不是 /users/something
。
行
app.use('/users', usersRouter);
将使用户路由器处理以 /users 为前缀的请求。因此,users 文件中的路由器处理的不是 /,而是 /users,因为您告诉您的应用程序为 /users/* 使用该特定路由器。实际上,这只是 router.get('/users')
的捷径。
您已将 usersRouter
注册为中间件,它将在请求 URI 以 /users
为前缀时执行,例如 https://localhost:3000/users/
或 http://localhost:3000/users/subroute
// attach `usersRouter` as middleware
app.use('/users', usersRouter);
如果在您的 users.js
中定义了这样的路线
router.get('/', (req, res) => {});
router.post('/users', (req, res) => {});
router.get('/:userId', (req, res) => {});
router.delete('/:userId', (req, res) => {});
module.exports = router;
您将拥有此路线列表
- GET => http://localhost:3000/users
- POST => http://localhost:3000/users/users/
- GET => http://localhost:3000/users/1
- 删除 => http://localhost:3000/users/1
如果您尝试访问的请求 URI 是在您的 Express 应用程序中定义的,则处理程序将回退到 Express 构建 Error Handler。
因此,如果您在 users.js
文件中定义了路由器 router.get('/users', ...)
,只要您尝试使用 http://...:../users/users
.[=23 访问该路由器,应用程序就不会中断=]
Learn more about middleware
Learn more about Express routing
在 app.js 我有:
const routes = './routes/'
const usersRouter = require(routes +'users');
/*more code*/
app.use('/users', usersRouter);
在users.js中,我有:
const express = require('express');
const router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
module.exports = router;
我的问题:router.get('/')
如何知道获取用户文件?通常我需要将 '/users'
传递给 router.get(
。但是 app.js 中的 app.use('/users'
,我只需要 users.js 中的 router.get('/')
。事实上,如果我在 users.js 中键入 router.get('/users'
,程序就会中断。
Learning Express,我可以解释它是如何工作的。
当你这样做时:
app.use('/users', usersRouter);
这已经过滤为仅将以 /users
开头的请求发送到路由器。它还从路径的开头剥离 /users
,因此路由器本身将在已从中剥离 /users
的简化路径上进行匹配,对于 /users
将只是 /
.对于像 /users/something
这样的 URL,路由器将匹配 /something
.
因此 router.get("/", ...)
将匹配 /users
的原始 URL,而不是 /users/something
。
行
app.use('/users', usersRouter);
将使用户路由器处理以 /users 为前缀的请求。因此,users 文件中的路由器处理的不是 /,而是 /users,因为您告诉您的应用程序为 /users/* 使用该特定路由器。实际上,这只是 router.get('/users')
的捷径。
您已将 usersRouter
注册为中间件,它将在请求 URI 以 /users
为前缀时执行,例如 https://localhost:3000/users/
或 http://localhost:3000/users/subroute
// attach `usersRouter` as middleware
app.use('/users', usersRouter);
如果在您的 users.js
中定义了这样的路线
router.get('/', (req, res) => {});
router.post('/users', (req, res) => {});
router.get('/:userId', (req, res) => {});
router.delete('/:userId', (req, res) => {});
module.exports = router;
您将拥有此路线列表
- GET => http://localhost:3000/users
- POST => http://localhost:3000/users/users/
- GET => http://localhost:3000/users/1
- 删除 => http://localhost:3000/users/1
如果您尝试访问的请求 URI 是在您的 Express 应用程序中定义的,则处理程序将回退到 Express 构建 Error Handler。
因此,如果您在 users.js
文件中定义了路由器 router.get('/users', ...)
,只要您尝试使用 http://...:../users/users
.[=23 访问该路由器,应用程序就不会中断=]
Learn more about middleware Learn more about Express routing