使用 ExpressJS 提供非标准 HTTP 方法

2023-11-23

我想编写一个 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);

我将我的非标准方法附加到 ExpressJS 导出的数组中lib/router/methods.js。这使我能够按预期编写服务器代码。使用时express.methodOverride() and a 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.

我希望能够使用 ExpressJS 来实现这一点,并且避免侵入其核心文件。

知道这是否可能以及如何实现吗?


简短的回答:不,这是不可能的。除非实现您自己的 HTTP 模块。

要进行测试,请启动准系统 HTTP 服务器...

$ node
> require('http').createServer(function(req, res) {
...   console.log(req.method);
...   res.end();
... }).listen(8080);

然后(正如您已经完成的那样)telnet 到它并发出 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.

$ 

在节点控制台中你会看到

GET

...但没有FOO。因此,Express 使用的 Node 的本机 HTTP 模块不会使这些请求可用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ExpressJS 提供非标准 HTTP 方法 的相关文章

  • 如何获取从 Express (Node.js) 中的表单传递的数据

    我想获取使用表单从页面传递的数据 并在重定向的页面中使用该数据 我的客户端有这个表格
  • 使用 Node.js 访问用 C++ 编写的 SDK

    我有一个用 C 语言编写的 SDK 可以与我的扫描仪设备进行通信 我需要开发一个可以访问扫描仪设备的电子应用程序 我知道有很多库可用于扫描仪 但我想使用这个 SDK 因为它允许我访问设备的完整功能 而且它是由设备制造商提供的 那么 有没有什
  • sails.js 水线嵌套填充查询

    我有一个返回对象的多个结果的查找查询 该对象包含一个包含另一个模型的模型 问题是水线不支持嵌套填充 因此它填充第一个模型 但不填充它的内部模型 我见过的所有示例都是针对 findOne 查询的 我正在寻找一种方法来解决返回多个结果的查找查询
  • Node.js 中的 webRTC

    我想在node js 中使用webRTC 来管理涉及浏览器和nodejs 上的对等点的混合连接 我做了一些测试和搜索 我尝试使用wrtc https github com js platform node webrtc or webrtc
  • ER_ACCESS_DENIED_ERROR:用户 ''@'localhost' 的访问被拒绝(使用密码:NO)

    我有这个问题 我已经研究过但无法解决它 我想它与数据库权限有关 但我无法修复它 if error throw error Error ER ACCESS DENIED ERROR Access denied for user localho
  • 如何在nodejs中使用crypto.randomBytes使用async/await?

    const crypto require crypto async function getKey byteSize let key await crypto randomBytes byteSize return key async fu
  • 茉莉花节点没有输出

    我是 JavaScript Node js 和 jasmine 的新手 我正在尝试运行 Node Craftsman Book 一书中的测试 FilesizeWatcher 我创建了 package json 文件并运行 npm insta
  • browserify 错误 /usr/bin/env: 节点: 没有这样的文件或目录

    我通过 apt get install 安装了 node js 和 npm 以及所有依赖项 然后安装了 browserify npm install browserify g 它完成了整个过程 看起来安装正确 但是当我尝试为此做一个简单的捆
  • 如何向 node-http-proxy 响应添加标头

    我需要在第三方服务上解决CORS 所以我想构建一个代理来添加标头 Access Control Allow Origin 为什么这段代码没有添加标题 httpProxy require http proxy var URL https th
  • NodeJS 无法加载 css 文件

    所以我正在尝试制作一个 NodeJS 服务器 并且我尝试保留尽可能少的附加组件 但是 我遇到了一个问题 我似乎无法加载任何内容CSS我调用的文件HTML文件 该调用似乎确实由服务器处理 但它不会显示在浏览器中 My 网络服务器 js fil
  • 运行“npm”返回“错误:找不到模块‘继承’”

    module js 340 throw err Error Cannot find module inherits at Function Module resolveFilename module js 338 15 at Functio
  • Azure Functions [JavaScript / Node.js] - HTTP 调用,良好实践

    从我的 Azure 函数 在 Node js 中运行 由 EventHub 消息触发 中 我想向某个外部页面发出发布请求 就像是 module exports function context eventHubMessages var ht
  • NPM:切勿为 npm 包安装嵌套的可选依赖项

    我正在编写一个包 A 我想将其发布到 NPM A 依赖于包 B 而包 B 又依赖于包 C 然后 C 有两个可选的本机依赖项 D 和 E 我明确知道我没有使用可选依赖项 D 和 E 并且永远不想当有人安装我的软件包时尝试安装它们 我知道你可以
  • Node.js 进行 rsa 加密的正确方法?

    我正在尝试创建一个 WS 来发出肥皂请求 在消息正文中有一个包含加密文本的字段 我有公钥来加密文本 但我获得的唯一结果是文本无法识别 我使用节点的加密模块来发出请求 并且文本已加密 但我不知道为什么没有正确加密 PS我用 openssl p
  • 设置缩略图内容类型

    我需要设置Content Type对于缩略图 我已经尝试如下所示 但它不起作用 仍然 它存储为流 天青功能 索引 json var Jimp require jimp module exports context myBlob gt Rea
  • HTTPbis - bis 是什么意思?

    我经常看到 bis 附加到协议版本 例如 v 34bis 或 httpbis bis 是什么意思或代表什么 我认识的一位电信工程师认为它可能起源于法国 正如其他人已经说过的 bis 来自 两次 或 重复 http oxforddiction
  • Eclipse 中的 node.js - 大多数人使用哪个插件?

    我最感兴趣的是服务器端 Web 开发 尽管能够在 Chrome 中重新部署一些部分会很好 我目前正在跑步Eclipse Indigo在 Ubuntu 上主要开发 Java Scala 程序并使用 git 到目前为止我遇到过http code
  • 为什么 Firefox 会忽略缓存标头并在刷新时重新验证?

    我有一些不可变的图像资源 可以永久缓存 Chrome 似乎尊重我的响应标头 并且不会重新验证资源 以下是 Chrome 中其中一项资源的示例 正如你所看到的 我包括cache control public max age expires e
  • 在 AWS Lambda 中共享代码

    在 AWS Lambda 函数之间共享代码的首选方式是什么 我有这样的结构 functions a 节点模块 index js 包 json b 节点模块 index js 包 json c 节点模块 index js 包 json 这让每
  • 使用任何节点模块在内存中创建 ZIP 文件

    是否有任何节点模块可以在内存中创建 zip 我不想将 zip 文件保存在磁盘上 以便我们可以将这个创建的 zip 文件发送到其他服务器 从内存 做这个的最好方式是什么 这是我的例子 var file system require fs va

随机推荐