Javascript 可以在侦听时向Node.js Express添加路由吗?

Javascript 可以在侦听时向Node.js Express添加路由吗?,javascript,node.js,express,Javascript,Node.js,Express,显然,向express添加路由的典型示例如下所示: var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('hello world'); }); app.listen(3000); var express = require('express'); var app = express(); app.listen(3000, function ()

显然,向express添加路由的典型示例如下所示:

var express = require('express');
var app = express();

app.get('/', function(req, res){
  res.send('hello world');
});

app.listen(3000);
var express = require('express');
var app = express();

app.listen(3000, function () {
  app.get('/', function(req, res){
    res.send('hello world');
  });
});
显然,在大多数情况下,在服务器开始侦听之前,您就知道
get
路由存在。但是,如果希望在服务器侦听后动态创建新路由,该怎么办?换句话说,我想做如下事情:

var express = require('express');
var app = express();

app.get('/', function(req, res){
  res.send('hello world');
});

app.listen(3000);
var express = require('express');
var app = express();

app.listen(3000, function () {
  app.get('/', function(req, res){
    res.send('hello world');
  });
});
在实践中,路由的回调显然是从某个远程源动态拉取的。我已经测试了上面的代码,似乎一切都正常工作,但是,我希望得到确认,在调用app.listen之后,在我继续使用此模式之前,创建路由不会有任何意外的副作用

注意:为了澄清,我不知道当我编写将创建express server的主
server.js
文件时,路由将是什么(因此,为什么我不能在调用
listen
之前创建路由)。当服务器启动/运行时,将从数据库中提取路由列表(及其各自的处理程序/回调函数)。

(Express作者),可以在运行时添加路由


主要的问题是,路由将按照添加的顺序进行计算,因此在运行时添加的路由的优先级将低于先前添加的路由。这可能重要,也可能不重要,这取决于您的API设计。

为什么需要等到您开始收听“将该路由组合在一起”时才开始呢?实际上不需要动态创建路由。你可以简单地让所有GET请求(“/*”,函数…转到一个函数,然后解析request.path,然后将其发送到你想从那里发送到的任何地方。这有点奇怪,因为网站的目录通常有某种形式的结构。最多你只需要在app.GET中使用一些regexp('/someDir/:otherDir',函数…其中:otherDir成为参数(req.param('otherDir'))它可以工作,但不正常!@damphat为什么不呢?我通常在设置路由之前调用
listen
。@robertklep这是我的感觉!数据库、中间件、路由都是在初始化阶段设置的,我们应该在listen()之前等待初始化完成。如果调用listen()在初始化完成之前,web用户可能会滥用这段时间来破解…,哦,只是一种感觉!您可以通过修改路由堆栈来重新排序它们