如何在响应和请求中添加新方法

2024-03-05

我想在node.js的响应和请求中添加新方法。

我怎样才能更有效地做到这一点?

我不明白这是如何在express.js中完成的


作为 JavaScript,有很多方法可以做到这一点。在我看来,对于express来说最合理的模式是将函数添加到早期中间件中的每个请求实例:

//just an example
function getBrowser() {
    return this.get('User-Agent'); 
}

app.use(function (req, res, next) {
  req.getBrowser = getBrowser;
  next();
});

app.get('/', function (req, res) {
    //you can call req.getBrowser() here
});

在express.js中,这是通过向http.IncomingMessage的原型添加附加函数来完成的。

https://github.com/visionmedia/express/blob/5638a4fc624510ad0be27ca2c2a02fcf89c1d334/lib/request.js#L18 https://github.com/visionmedia/express/blob/5638a4fc624510ad0be27ca2c2a02fcf89c1d334/lib/request.js#L18

这有时称为“猴子修补”或“自由修补”。对于这到底是美妙还是糟糕,人们的看法各不相同。我上面的方法更加谨慎,不太可能对 Node.js 进程中运行的其他代码造成故意干扰。添加您自己的:

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

如何在响应和请求中添加新方法 的相关文章

  • Node.js 每个用户一个会话

    如何防止我的用户同时从两个设备登录我的系统 因此 如果用户从计算机登录 当他从不同的计算机登录时 首先会自动关闭会话 不需要使其实时 我使用node js express js mongoose passport connect mongo
  • 限制文本区域中每行的字符数

    我整个周末都在寻找解决这个难题的方法 但尚未找到一个可以正常工作的解决方案 我想要实现的是限制文本区域中每行的字符数 不是相同地限制它们 而是我选择的每行不同的字符数 例如 我只想在我的文本区域中包含 4 行 第 1 2 和 3 行将限制为
  • 如何将中间件绑定到socket.io中的事件

    现在您可以将中间件绑定到io use middleware 但这仅在建立套接字连接时触发 有没有办法在将其传递给事件句柄之前拦截它 就像在expressjs中一样 换句话说 In 快递 js你可以做 app get middleware1
  • 由于预发布,Node 应用程序无法运行

    即使安装成功 我也会安装无效的软件包 顺便说一句 这个问题与答案相关 关于版本控制的问题 https stackoverflow com questions 27628153 npm versioning how does this edg
  • 将一个文本框的内容复制到另一个文本框

    假设在文本框中输入了一个条目 是否可以在第二个文本框中保留相同的输入文本 如果是这样 这是如何完成的
  • 将 jquery-mobile 与 Webpack 结合使用

    我正在尝试使用 webpack 加载 jquery mobile 但到目前为止还没有运气 我知道 jquery mobile 依赖于 jquery ui 而 jquery ui 又依赖于 jquery 如何在 Webpack 中设置这样的场
  • 未捕获的引用错误:myFunction 未定义[重复]

    这个问题在这里已经有答案了 这到底是怎么回事 http jsfiddle net sVT54 http jsfiddle net sVT54
  • 由于缺少会话而在 Next.js 中使用 Next-Auth 进行重定向时,如何显示 Toast 通知? [复制]

    这个问题在这里已经有答案了 例如 假设我有一个名为internal tsx 的页面 其中包含 export const getServerSideProps GetServerSideProps async ctx gt const ses
  • 使react-leaflet能够离线使用

    我一直在使用反应传单 https github com PaulLeCam react leaflet图书馆 到目前为止运作良好 现在我希望网站预加载尽可能多的图块 以便网络应用程序 也是 PWA 可以在没有互联网的情况下使用 我找到了一些
  • Aptana Studio 3 上的预览选项卡在哪里?

    我在 Windows PC 上使用 Aptana Studio 2 并有一个选项卡用于在 IE 上预览页面 另一个选项卡用于在 Firefox 上预览 但我切换到了 Aptana 3 我不知道是没有预览还是我没有找到它 是的 我在 stac
  • 访问 TypeScript 数组的最后一个元素

    TypeScript 中有访问数组最后一个元素的符号吗 在 Ruby 中我可以说 array 1 有类似的东西吗 您可以通过索引访问数组元素 数组中最后一个元素的索引将是数组的长度 1 因为索引是从零开始的 这应该有效 var items
  • jQuery 选择器:为什么 $("#id").find("p") 比 $("#id p") 更快

    该页面的作者 http 24ways org 2011 your jquery now with less suck http 24ways org 2011 your jquery now with less suck断言 jQuery
  • 如何滚动到div内的元素?

    我有一个滚动的div我想在点击它时发生一个事件 它会强制执行此操作div滚动以查看内部元素 我写的JavasCript是这样的 document getElementById chr scrollIntoView true 但这会在滚动时滚
  • 使水平滚动条始终可见,即使底部不在视图中

    我将用一个片段来开始这个问题 该片段几乎显示了我想要完成的任务 wrapper overflow hidden display flex sidebar min width 200px background 333 color FFF co
  • 如何将 Browserify 与外部依赖项一起使用?

    我正在尝试慢慢地将 Browserify 引入我的网站 但我不想重写所有 js 也不希望 jquery 和其他库的重复实例与我的 Browserify 版本捆绑在一起 如果我构建将 jquery 列为外部依赖项的模块 那么如何将其指向我的全
  • 是否可以使用打字稿映射类型来创建接口的非函数属性类型?

    所以我正在研究 Typescript 的映射类型 是否可以创建一个接口来包装另一种类型 从而从原始类型中删除函数 例如 interface Person name string age number speak void type Data
  • Jquery,清除/清空 tbody 元素的所有内容?

    我认为这会相当简单 但似乎空方法无法清除我拥有的 tbody 如果有人知道执行此操作的正确方法 我将不胜感激 我只想删除 tbody 中包含的所有内容 到目前为止我正在尝试 tbodyid empty HTML table tbody tr
  • 从多维无穷大数组中删除数组元素

    我想删除一个特定元素 例如 我想删除元素id 76在下面的数组中 而且 数组可以无限地组合在一起 这里的问题是我无法刷新页面 因为我使用 Vue js 进行即时操作 如果我能做到这一点 我的下一个问题可能是如何在我现在想要的地方添加一个元素
  • React Native - 跨屏幕传递数据

    我遇到了一些麻烦react native应用程序 我不知道如何跨屏幕传递数据 我意识到还有其他类似的问题在 SO 上得到了回答 但是这些解决方案对我来说不起作用 我正在使用StackNavigator 这是我的设置App js file e
  • 如何在 SVG 元素上使用箭头标记?

    我需要在 d3 js 中创建一个箭头 但我找到的只是带有节点图的示例 我需要的是简单地制作一个从 A 点到 B 点的箭头 我尝试实现以下示例中的部分代码 http bl ocks org 1153292 http bl ocks org 1

随机推荐

  • zod TypeError:无法读取未定义的属性(读取“_parse”)

    我有一个使用 Zod 的 Vite 库 我想解析配置 我的文件夹结构与配置对象结构类似 index ts文件始终导出其自己目录中的所有文件及其子目录中的所有内容 例如export from subDir 所以根文件导出 整个库 以下设置显示
  • 批处理文件将部分文件名移动到部分文件夹名称字符串

    我有一个充满文件夹的目录 这些文件夹以这种方式命名 ABC L2 0001 2ABC12345 0101 xxxx 我需要将许多以此方式命名的文件移动到与文件的前 9 个字符匹配的文件夹中 2ABC12345 0101 xyxyxyx yx
  • 如何在 MSBuild 中并行运行任务

    除非我严重误解了 MSBuild 否则任务将按照它们在 目标 节点中出现的文档顺序执行 我希望能够指定两个任务 例如 xcopy 任务 可以并行运行 我期待有一个 并行 任务或其他任务 尝试 MSBuild 扩展包中的新并行任务 http
  • 使用 .htaccess 更改 url 中的目录

    我正在尝试更改地址栏中显示的网址mysite com blog wedding hair to mysite com services wedding hair using htaccess 使用以下答案 https stackoverfl
  • 带负值和高度的 CSS 相对定位

    我试图对 DIV 元素进行负向定位 在示例中是 content 但我的问题是 div 的容器 wrapper2 获得了太多高度 实际上是 content 给出的高度 但正如我 我将内容向上移动 我想相应地降低 wrapper2 的高度 在这
  • 删除 MVC 中的浏览器自动完成功能

    我目前正在尝试删除用户浏览器完成的表单自动完成功能 这可能会导致一些关键行为 因为它填充了密码字段 我已经将自动完成属性添加到我的所有文本框字段中 但是当我尝试使用 Firefox 时 它仍然会将我当前的登录信息加载到字段中 有谁知道如何解
  • JScrollPane 未添加到 JTextArea

    我看到了几个类似这个问题的问题 但我无法解决这个问题 我无法得到JScrollPane可见于JTextArea 谁能指出我哪里做错了 谢谢 package experiement import java awt Dimension impo
  • openlayers 策略:ol.loadingstrategy.bbox 不适用于 wfs 功能

    我尝试使用此代码使用 openlayers 4 最大 1000 可视化 wfs 中的地块 但是视图地图的每次移动或缩放时范围不会改变 或者新功能不会加载到图层中 var parcellaireSource new ol source Vec
  • MinGW GCC:“未知转换类型字符'h'”(snprintf)

    好的 我在 Windows 7 上使用 MinGW GCC 4 6 2 编译 C 文件时遇到了一个奇怪的问题 该文件包含以下 C 代码 include
  • 无法访问在 docker 内创建的 docker-compose 容器

    我有一个docker compose yml在端口上启动简单 HTTP 回显服务的文件8800 version 2 services echo server image luisbebop echo server container nam
  • CSS 比较运算符

    我需要定位占其父 div 80 以上的 div 作为进度条 考虑到我们可以瞄准specificCSS 宽度 data width 80 我们如何瞄准比较 这做到了not在 Firefox 或 Chrome 中工作 data width gt
  • Powershell / Perl:将多个 CSV 文件合并为一个?

    我有以下 CSV 文件 我想将它们合并到一个 CSV 中 01 csv apples 48 12 7 pear 17 16 2 orange 22 6 1 02 csv apples 51 8 6 grape 87 42 12 pear 2
  • 如何在Windows系统上安装geckodriver

    我正在尝试安装 webdriver 为了打开 Firefox 我需要安装 geckodriver 并将其安装在正确的路径中 首先 安装 geckodriver 的下载链接仅允许您安装非可执行文件 那么有没有办法让它成为可执行文件呢 其次 我
  • 无法探测视频 laravel ffmpeg

    我一直在关注这个教程https github com pascalbaljetmedia laravel ffmpeg https github com pascalbaljetmedia laravel ffmpeg我正在尝试调整我的视频
  • 具有相同名称的多个隐藏输入,始终检索最后一个输入[重复]

    这个问题在这里已经有答案了 foreach graphEdge as graphNode echo div class form check mb 3 div
  • 使用 Camel 的表达式语言获取并格式化昨天的日期

    我在 Camel 的路径中使用日期 fileName date now dd MM yyyy 但我现在需要的是 1天 那可能吗 嗯 不直接 简单语言中的 date 对象只能获取当前时间 或者您放置在标头中的某个时间值 您可以在 java 或
  • boost::thread 并创建它们的池!

    boost thread 类有一个默认构造函数 它给出 Not a thread 那么什么是 boost thread t1 适合什么 我可以给它一个稍后在代码中执行的函数吗 另一个问题 我正在尝试编写一个具有分阶段架构 SEDA 的小服务
  • Crossfilter过滤器不过滤(dc.js)

    我试图在交叉过滤器中使用过滤器 但是不行 这是 JSBin http jsbin com liwiru 8 edit 这是最相关的代码 var userDimension data dimension function d return d
  • Android 中用户不活动?

    我想查看我的 Android 应用程序中的用户不活动情况 如果用户在 1 分钟内没有执行任何活动 那么该应用程序应该离开屏幕 这意味着它应该显示一个对话框 要求输入密码 之前存储在共享首选项中 如果密码与活动应该再次开始 有人可以帮我解决这
  • 如何在响应和请求中添加新方法

    我想在node js的响应和请求中添加新方法 我怎样才能更有效地做到这一点 我不明白这是如何在express js中完成的 作为 JavaScript 有很多方法可以做到这一点 在我看来 对于express来说最合理的模式是将函数添加到早期