【发布时间】:2013-12-31 13:05:56
【问题描述】:
显然,添加路由以表达的典型示例如下:
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('hello world');
});
app.listen(3000);
显然,在大多数情况下,您在服务器开始侦听之前就知道get 路由存在。但是,如果您想在服务器侦听后动态创建新路由怎么办?换句话说,我想做如下的事情:
var express = require('express');
var app = express();
app.listen(3000, function () {
app.get('/', function(req, res){
res.send('hello world');
});
});
在实践中,路由的回调显然会从某个远程源动态拉取。我已经测试了上面的代码,一切似乎都正常运行,但是,我希望在我继续使用这种模式之前,在调用 app.listen 之后创建路由不会有任何意外的副作用。
注意:澄清一下,当我编写将创建快速服务器的主要 server.js 文件时,我不知道路由是什么(因此为什么我不能在调用 listen 之前创建路由)。当服务器启动/运行时,路由列表(及其各自的处理程序/回调函数)将从数据库中提取。
【问题讨论】:
-
为什么要等到开始收听才能将这条路线放在一起?
-
不需要动态创建路由。您可以简单地让所有 GET 请求 ('/*', function... 转到一个函数,然后解析 request.path,然后将其发送到您想要的任何位置。但这有点奇怪,因为网站他们的目录通常有某种形式的结构。最多你只需要在 app.get('/someDir/:otherDir', function... 'otherDir'))
-
可以,但是不行!
-
@damphat 为什么不呢?我通常会在设置路线之前致电
listen。 -
@robertklep 这就是我的感觉!数据库、中间件、路由是在初始化阶段设置的,我们应该在listen()之前等待初始化完成。如果我们在初始化完成之前调用listen(),网络用户可能会滥用这个时间来破解……哦,只是一种感觉!
标签: javascript node.js express