Pie*_*yle 7 http node.js express
我想编写一个HTTP服务器,使用非标准HTTP方法(动词)回答请求.例如,客户端会发出类似的请求FOO / HTTP/.1.1.在服务器端,此请求将由以下内容处理:
var express = require('express');
var app = express.createServer();
app.configure(function(){
app.use(express.logger({ format: ':method :url' }));
app.use(express.methodOverride());
});
app.foo('/', function(req, res){
res.send('Hello World');
});
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
我将非标准方法附加到ExpressJS中导出的数组中lib/router/methods.js.这允许我按预期编写我的服务器代码.使用express.methodOverride()和POST请求时_method=foo,它的工作原理.但实际的FOO请求不起作用.一旦客户端发送请求的第一行,服务器就会关闭连接:
$telnet localhost 3000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
FOO / HTTP/1.1
Connection closed by foreign host.
Run Code Online (Sandbox Code Playgroud)
我希望能够使用ExpressJS实现这一点,而不会避免入侵其核心文件.
知道这是否可行以及怎么做?
简短的回答:不,这不可能。并非没有实现自己的HTTP模块。
要测试,请启动准系统HTTP服务器...
$ node
> require('http').createServer(function(req, res) {
... console.log(req.method);
... res.end();
... }).listen(8080);
Run Code Online (Sandbox Code Playgroud)
然后(正如您已经完成的那样)远程登录到它并发出GET和FOO请求...
$ telnet localhost 8080
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1
HTTP/1.1 200 OK
Connection: keep-alive
Transfer-Encoding: chunked
0
FOO / HTTP/1.1
Connection closed by foreign host.
$
Run Code Online (Sandbox Code Playgroud)
在节点控制台中,您将看到
GET
Run Code Online (Sandbox Code Playgroud)
...但是没有FOO。因此,Express使用的节点的本机HTTP模块不会使这些请求可用。
| 归档时间: |
|
| 查看次数: |
3040 次 |
| 最近记录: |