【问题标题】:Okay to add a route to Node.js Express while listening?可以边听边添加到 Node.js Express 的路由吗?
【发布时间】: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


【解决方案1】:

According to TJ(Express的作者),运行时添加路由是可以的。

主要问题是路由按照添加的顺序进行评估,因此在运行时添加的路由将比之前添加的路由具有更低的优先级。这可能很重要,也可能无关紧要,具体取决于您的 API 设计。

【讨论】:

  • 你可以通过修改路由栈来重新排序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 2021-05-14
  • 2019-09-02
相关资源
最近更新 更多