【发布时间】:2017-02-26 14:10:01
【问题描述】:
我正在创建一个 Node.js api,但我在理解路由器中间件时遇到了一些困难。 这是我点击 api 时运行的中间件。
app.use("/", index);
app.use("/menu", menu);
index-->index.js;
菜单-->menu.js
现在,index.js 有一个注册和登录路由器,两者都使用 POST。 menu.js 中没有此功能
index.js
router.post("/signup", function(req,res){
router.post("/signin", function(req,res){
问题如下:
然而,在 index.js 中为 POST 请求指定的处理程序会执行,并且即使在调用 /menu 中间件后,用户在菜单页面(URL:/menu)上也能够登录/注册
我很难理解为什么会这样。
任何帮助都会很棒,谢谢。
【问题讨论】:
-
这是什么意思:“然而,为 index.js 中的 POST 请求指定的处理程序正在执行”。另外,您能说明一下您的路由器是如何连接的吗?
-
一旦路由器连接到 Express 中,它对来自所有页面的所有请求都是活动的。您似乎在想,当用户在
/页面上时,不知何故只有某些路由处于活动状态。这不是 Express 的工作方式。路由在您的服务器启动时安装,并且对于所有请求始终处于活动状态。您通常会使用来自不同页面的不同 URL 来控制执行哪个路由。您不能使用来自 /page1 的请求 /xxx 和来自 /page2 的请求 /xxx 并期望它们命中不同的路由处理程序。 -
@jfriend00 好的......所以所有定义的路线都保持活动状态。但是,如果我已经为我的 API 定义了为所有 /menu GET 请求执行 menu.js,我假设在 /menu 在 URL 上处于活动状态之前,它应该只执行 menu.js
-
@jfriend00 除了概念之外:所以如果从 localhost:port/menu 向 /signin 发出 AJAX 请求,它是向 localhost/signin 还是 localhost/menu/signin 发出请求?
-
如果前导
/在请求中,那么它是域相关的,而不是页面相关的,因此对/signin的 Ajax 请求将转到http://localhost/signin。如果 Ajax 请求只是针对signin,那么它是相对于页面的,因此如果页面是http://locahost/menu,那么 Ajax 请求将转到http://localhost/menu/signin。这一切都是在发出ajax请求之前由浏览器决定的。您几乎总是希望在请求中使用前导/,因此它们始终是域相关的。
标签: node.js routing middleware