【问题标题】:How express.route determined routeexpress.route 如何确定路线
【发布时间】:2019-08-08 06:11:58
【问题描述】:

我开始学习 Node.js(使用 Express.js)和 React.js。所以我有一些关于 Express Router 的问题

让我们看看我的部分代码

server.js

const app = express();
const apiRouter = require("./Routes/apiRoute");

app.use("/api", apiRouter);

app.listen(3000, () => {
  console.log("application run on port " + 3000);
});

/Routes/apiRoute.js

const express = require("express");
const router = express.Router();

router.route("/user/:id")
    .post((req,res)=>{
        // Do something
    })



router.route("/user/status")
    .post((req,res) => {
        // do something
    });

所以。我的问题是快递路线如何决定走哪条路。

从我的示例代码中,如果我发送这样的 POST 请求 http://localhost:3000/api/user/status

express 路由器会看到状态是:id 对吗?

另一方面,如果我将/user/status 的路线向上移动,它会按我的预期进行,对吗?

谢谢。

【问题讨论】:

  • 路由匹配从上到下或从头到尾进行,s首先匹配的URL将起作用并且搜索URL将停止。所以你可以把 /status URL 放在上面

标签: javascript node.js express express-router


【解决方案1】:

Express 按时间顺序匹配路线。

Express 开始将 URL 与已在脚本中声明的第一个路由匹配,如果不匹配则移动到下一个。这是因为 Express 是一个 Javascript 框架。您传递给路由的函数,即(req, res) => {...} 实际上是一个 js 回调函数,如果用户点击与声明的相应字符串匹配的路由,就会调用该函数。而在 Javascript 中,首先为事件设置的回调会被首先调用,因为这些回调是在队列中维护的。众所周知,队列是 FIFO。

如果您希望"/user/:id""/user/status" 都起作用,则必须先在代码中声明后一个,然后再声明第一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2016-04-06
    相关资源
    最近更新 更多