看來OP正試圖通過正則表達式來排除pageRouter
/api
和/resource
。但是,這不是必需的。只要/api
和/resource
路由器在pageRouter
之前定義,它們將首先被觸發,並且不會再通過pageRouter
。
pageRouter
之前只要定義/api
和/resource
,然後用router.use('/', pageRouter);
,所以,除了/api
和/resource
所有URL將被pageRouter
被傾聽。
以下是示例代碼。我已驗證並確認對/resource
的HTTP請求不會經過pageRouter
。
文件:
./app.js
./routes.js
./pageRouter.js
./resourceRouter.js
對於./app.js
:
const express = require('express');
const app = express();
const routes = require('./routes');
app.use('/', routes);
app.listen(3000, function() {
console.log('Example app listening on port 3000!')
});
對於./routes.js
:
var express = require('express');
var router = express.Router();
const resourceRouter = require('./resourceRouter');
const pageRouter = require('./pageRouter');
router.use('/resource',resourceRouter);
router.use('/', pageRouter);
module.exports = router;
爲./resourceRouter.js
:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.send('respond with resource');
});
module.exports = router;
對於./pageRouter.js
:
var express = require('express');
var router = express.Router();
router.get('/resource', function(req, res, next) {
console.log('hit /resource in pageRouter');
res.send('respond with page by /resource');
});
router.get('/new-page', function(req, res, next) {
res.send('respond with page by /new-page');
});
router.get('*', function(req, res, next) {
console.log('hit * in pageRouter');
res.send('respond with page by *');
});
module.exports = router;
運行./app.js
後,HTTP GET
請求/resource
絕不會打./pageRouter.js
。
看來你試圖通過正則表達式來排除'/ api'和'/ resource'。你不需要。由於'/ api'和'/ resource'路由器是在pageRouter之前定義的,它們將首先被觸發,而不是被pageRouter內部定義的路由器。只需使用'router.use('/',pageRouter);',這樣除了'/ api'和'/ resource'之外的所有URL都將被pageRouter監聽。 – shaochuancs
這將導致:/資源..將首先通過資源路由器,然後通過pageRouter.But我只想通過資源路由器/資源。 – sinbar
真的嗎?請檢查我的答案。 – shaochuancs