Arj*_*hta 5 javascript routes node.js express
如何将路由处理程序添加到已存在且已实例化的http 服务器?
我发现的所有路由器(包括express)似乎都要求将它们传递给http.createServer()方法.
例如用express:
var server = http.createServer(app);
Run Code Online (Sandbox Code Playgroud)
我的主要标准:
示例:将服务器传递给SockJS
var http_server = http.createServer(); // agnostic
sockjs_server.installHandlers(http_server, options);
http_server.listen(...);
Run Code Online (Sandbox Code Playgroud)
在sockjs源代码中完成的方式似乎相当神秘......但我认为它涉及遍历现有的处理程序并用自定义路由器/处理程序覆盖它们.
非常感谢您的帮助!
好吧,http服务器只不过是一个EventEmitter.它有一个request事件,它处理来自客户端的请求.
因此,您可以做的一件事是围绕当前处理函数创建一个包装函数.例如,让我们假设存在一些明确的应用:
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('Hello World!');
});
var server = app.listen(8080);
Run Code Online (Sandbox Code Playgroud)
所以,现在,您可以简单地浏览request服务器中当前注册的侦听器列表,删除旧的侦听器函数并将它们包装在一个新的,以您希望的方式处理您的请求.例如,您现在可以创建自己的路由器,并根据其内容(即路径,内容类型,接受的语言等)确定通过哪个管道发送请求.
server.listeners('request').forEach(function(listener){
server.removeListener('request', listener);
server.on('request', function(req, res){
console.log('Before');
listener(req,res);
console.log('After');
});
});
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,您可以看到我console.log围绕侦听器函数的实际执行运行了几个语句.在这种情况下,监听器功能实际上是Express主request处理程序.表达式处理程序表示一个管道,通过创建这个新的包装器函数,您只需在管道的开头添加一个新管道.
此技术将允许您首先处理请求并决定是否要发送您自己的响应并在此处终止请求,或者通过不同的管道发送请求或将请求发送到快速管道(即您可用的旧侦听器功能)新请求处理程序关闭).
| 归档时间: |
|
| 查看次数: |
2662 次 |
| 最近记录: |