nodejs有关路由转发问题
发布于 1 个月前 作者 cuixiaona 389 次浏览 来自 问答

我在app.js增加了多个路由转发的配置,代码如下: //增加路由请求转发配置 app.use(’/’,routes); app.use(’/login’, routes); app.use(’/logout’, routes); app.use(’/dsg’,routes); app.use(’/userManage’,userManage); 其中userManage的代码如下: /**

  • 用户管理路由配置
  • @type {*|exports} */ var express = require(‘express’); var router = express.Router(); var request = require(‘request’); router.post(’/userManage’,function(req,res){ console.log(‘remote server!’); res.sendFile(path.join(__dirname,"…/views",‘login.html’)); });

module.exports = router; 接下来我在界面发起请求,代码如下: Ext.Ajax.request({ url: ‘/userManage’, method : ‘post’, params: { username: username, password: password }, 可是nodejs控制台确一直报错,错误信息如下: QQ截图20151203110158.png

10 回复

麻烦大家帮忙看看咋回事儿,我在网上查了一下,基本上都是通过这种方式进行请求转发的,不知道为什么一直报错

你在userManage里面写的“router.post(’/userManage’”这个请求会对应到/userManage/userManage吧,而不是/userManage。

@Ash-sc 我没太明白你说的是什么意思

我在想会不是是你写的请求路径不对,所以在控制台会报404,你在ajax里面写的请求url是“/userManage”,而userManage里面写的“router.post(’/userManage”对应的请求路径应该是“/userManage/userManage”,因为你在app.js里面用了“app.use(’/userManage’,userManage);” 不知道是不是这个原因

恩恩,明白了,刚才试了下,你说的是对的。现在已经能访问的到了

顺着LZ的问题,我想请教一下,如果这样:

app.use(’/’,routes1);
app.use(’/login’, routes2);

当访问地址为:localhost:3000/login/ 的时候,routes1会不会进?还是只进routes2?

@echoloyuk 会进入routes1,不会进入routes2,如果界面请求是/login/login,会进入routes2

@cuixiaona 哦,酱紫啊。那请求的是/login/login/这种情况的话,会进入routes1吗?看官网的API上说,’/'匹配所有/开头的啊

@echoloyuk 会进routers1的, express匹配请求是具有优先级的,会根据你写的“app.use(’/’,routes1);”来确定优先级;也就是说“/login/login”会先去routers1里面找“/login/login”,如果没有,再去routers2里面找“/login”,如果routers1里面有“/login/login”则会忽略routers2里面的“/login”。当然,你如果需要routers1和routers2都响应到这个请求的话,那么,用“next()”。

回到顶部