路由概念理解

Routing conceptual understanding

我正在创建一个 Node.js api,我在理解路由器中间件时遇到了一些困难。 这是我的中间件,它会在您点击 api 时运行。

app.use("/", index);
app.use("/menu", menu);

索引-->index.js; 菜单-->menu.js
现在,index.js 有一个注册和登录路由器,都使用 POST。 menu.js

中没有这个 index.js

router.post("/signup", function(req,res){
router.post("/signin", function(req,res){

问题如下:

  • 当我的 URI 位于 /menu 时,调用中间件 #2 后呈现正确的页面
  • 当我点击 signup/signin 按钮时,它会在 /signin 发送一个 AJAX post 请求/signup,无论如何。
  • 据我所知,第 2 点不应该起作用,因为 ajax post 请求将转到 /menu/signup,为此有 NO 处理程序。
    然而,为 index.js 中的 POST 请求指定的处理程序执行,并且用户能够签署 in/up 即使在菜单页面上( URL: /menu) 在调用 /menu 中间件后
    我很难理解为什么会这样。
    任何帮助都会很好,谢谢。

  • 我会post这个作为答案,因为我认为它解决了你的问题。

    如果您从没有前导 /(例如 signup)的网页进行 Ajax 调用,则浏览器会将其解释为相对页面,这意味着如果页面 URL 是 http://localhost/menu,您请求 ajax 调用 signup,然后浏览器将请求 url 调用 http://localhost/menu/signup

    但是,如果您在 ajax 请求前加上 / 并请求 /signup,那么这是域相关的,因此浏览器将添加域并请求 http://locahost/signup.不会使用当前页面的路径。您几乎总是希望使用前导 /,因为无论您在哪个页面,这都会给您一个一致的 URL 请求。