express配置路由只需要通過app.method(url,func)
來配置,其中url配置和其中的引數獲取方法不同
直接寫全路徑
路由中允許存在
.
get請求傳入的引數
router.get("/home", (req, res) => {
res.status(200).send(req.query);
});
通過
/home?a=1
會收到物件:{a:1}
post請求傳入的引數
app.use(express.json());
router.post("/about", (req, res) => {
res.status(200).send(req.body);
});
加上
:XX
匹配,如下router.get("/home/:id", (req, res) => {
res.status(200).send(req.params.id);
});
如果有兩個相同的命名,後面的會覆蓋前面的,如
router.get("/a/:id/b/:id", (req, res) => {
res.status(200).send(req.params);
});
/a/123/b/456
會得到{id:456}
這種匹配還能通過
. -
兩種符號來拆分匹配,如router.get("/:id-:name/:pwd.:end", (req, res) => {
res.status(200).send(req.params);
});
/a-bb/123.0
會得到{"id":"a","name":"bb","pwd":"123","end":"0"}
通過正則表示式,如下
router.get("/a+|bb/", (req, res) => {
res.status(200).send("include a");
});
該路由收到
/aaa /bb
都會返回在這裡
*
與正則的不同 相當於.*
應該用{0,}
來代替*
而
.
會被判斷為字元所以不能用來匹配在需要多個正則匹配路徑,要先命名,並且正則一定要寫在括號內,如下
router.get("/:name(aaa|bbb)/:id(\\d+)/other", (req, res) => {
res.status(200).send(req.params);
});
http://localhost:3000/aaa/99/other
能得到結果{"name":"aaa","id":"99"}
直接寫正則
只需要路徑能匹配上正則就行,同時因為是整個路徑匹配,所以不要用
^
來判斷前置字元router.get(/aa/, (req, res) => {
res.status(200).send("get /a/");
});
以上路由能用
/aa /a/b/c/aabv/s
來匹配同一個路由用不同方法響應可以用
route
來鏈式響應,如router
.route("/a")
.get((req, res) => {
res.status(200).send("get");
})
.post((req, res) => {
res.status(200).send("post");
});
現在
get post
請求都能分別匹配到路由