Expressjs 动态路由问题
Expressjs dynamic routing issues
我正在使用Express 4.0,我正在尝试创建一个路由,在主页上显示来自所有国家/地区的所有用户。
切换国家 我希望向来自该国家的所有用户展示。
还有两种用户(教师和学生),我也希望在那里做同样的事情。
在教师页面上,我希望显示所有教师,并根据(以前或非)所选国家/地区,我希望看到来自该国家的教师......
我在执行此操作时遇到了几个问题:
1)主页工作正常,带有/:countryCode
的主页工作正常,/teachers
和/students
不再加载...如果我把/:countryCode
放在其他页面加载的所有内容下面......(?!?).
2) 我是否还必须创建这样的路由:/:countryCode/teachers
?或者有一种方法可以将国家代码存储在某处...?
3)在菜单中,似乎我必须创建2个不同的菜单,一个普通菜单和一个带有国家代码扩展名的菜单......
目前我的路由是这样的:
app.get('/', homeController.index);
app.get('/:countryCode', homeController.indexByCountry);
app.get('/teachers', userController.getTeachers);
app.get('/students', userController.getStudents);
我正在使用参数:countryCode
查询来自该国家/地区的用户。
有更好的方法来创造这一切吗?有什么最佳实践吗?
在网上我没有看到类似的东西,但我认为拥有这样的东西应该很受欢迎。
希望你能帮上忙。
根据我从您的问题中得出的信息,您希望能够在明确提供国家/地区代码时进行处理,以及您希望显示所有用户(学生、教师或两者)或使用以前提供的国家/地区代码的默认设置。如果这不是您的意图,请告诉我。
问题1:
要回答您的第一个问题,/teachers
和/students
无法加载的原因是它们被匹配为国家/地区代码。我的理解是,快递将按照定义的顺序优先处理您的路线。
正弦/:countryCode
定义在 url /teachers
将调用homeController.indexByCountry
的其他两条路由之上,countryCode
参数等于 "teachers"
。通过在/:countryCode
路由上方定义这些路由,它们将具有优先级并按预期工作。所以:
app.get('/', homeController.index); // Express will check this first
app.get('/teachers', userController.getTeachers); // Then this
app.get('/students', userController.getStudents); // Then this
app.get('/:countryCode', homeController.indexByCountry); // And finally this
问题2:
要为教师或学生指示新的国家/地区代码,一种解决方案可能是定义像/:countryCode/teachers
这样的路线(或者对我来说更有意义的/teachers/:countryCode
)。
但是,如果您想保存国家/地区代码,则可以使用会话。有一个名为 express-session 的快速中间件包,它将帮助您做到这一点。
例如:
var express = require('express');
var session = require('express-session');
var app = express();
// Tell the express app to use the session middleware
app.use(session({
secret: 'app secret key',
resave: false,
saveUninitialized: true
}));
app.get('/', function(req, res) {
if (req.session.countryCode) { // If country code has been set
res.send('Homepage, country code is currently ' + req.session.countryCode);
} else {
res.send('Homepage, country code not set');
}
});
// Define routes for '/teachers' and '/students' etc.
app.get('/:countryCode', function(req, res) {
// Set the countryCode property of the session object to the :countryCode
// variable in the url
req.session.countryCode = req.params.countryCode;
res.send("Homepage, country code is now " + req.session.countryCode);
});
app.listen(3000);
尽管我遇到的一个问题是,当我在Web浏览器中访问服务器时,它会发送GET请求来查找图标,这被解释为国家/地区代码并将其设置为"favicon.ico"。
一种解决方法可能是在设置会话变量之前检查提供的国家/地区代码是否符合某些特定格式,例如,如果您希望国家/地区代码始终为 2 个字符的字符串(例如。"英国"或"法国")。
问题3:
由于我们现在知道我们可以记住之前设置的国家/地区代码,因此您只需提供一个链接到/teachers
等的菜单,您仍然可以使用会话变量中的国家/地区代码。
我希望这有所帮助。
- 无法运行php代码,有角度路由问题
- ember.js:转换到相同的路由会产生堆栈溢出问题
- 控制器操作的路由问题
- 有UI路由问题的角度路由
- 在Node.js中将数据传递到子路由时出现问题
- Angular中的ajax调用和路由问题
- Angular1.3路由的直接URLS问题-即使html5mode为false
- 我在角度指令和角度路由中有一个问题
- 自定义 Mod 文件夹的角度路由问题
- 角度 js 路由提供程序中的问题
- 基于 id 访问 url 时存在角度路由问题
- Router.go 方法使路由页面流星变灰的问题
- Web API 应用程序中 asp.net 路由和路由前缀问题
- 在快递服务器问题中设置“邮政”路由时遇到困难
- 表达 4 + 角度 2 HTML 5 路由问题
- Expressjs 动态路由问题
- ASP.NET MVC 4 路由问题
- 角度JS和动态路由问题
- Slim Framework v3 - PUT 路由的问题
- AngularJS问题:路由后第二页未调用指令