在快速路由文件中使用 socket.io

2023-12-11

我正在尝试将 Socket.io 与 Node.js 结合使用,并发送到路由逻辑内的套接字。

我有一个相当标准的 Express 3 设置,其中有一个位于路由中的 server.js 文件,然后我有一个位于路由文件夹中的 index.js,该文件夹导出站点的所有页面/可公开访问的功能。所以它们看起来像:

exports.index = function (req, res) {
    res.render('index', {
        title: "Awesome page"
    });
}; 

在 server.js 中定义的路由如下:

app.get('/',routes.index);

我假设我必须在 server.js 中创建 socket.io 对象,因为它需要服务器对象,但如何访问该对象并从 index.js 导出函数向其发送?


现在 Express 4.0 有更好的方法来做到这一点。

您可以使用应用程序.set()存储对的引用io object.

基本配置:

var app = require('express')();
var server = app.listen(process.env.PORT || 3000);
var io = require('socket.io')(server);
// next line is the money
app.set('socketio', io);

内部路由或中间件:

exports.foo = function(req,res){
    // now use socket.io in your routes file
    var io = req.app.get('socketio');
    io.emit('hi!');
}

相关信息app.set() and app.get()在下面:

应用程序.set(名称,值)

将设置名称分配给值。您可以存储任何您想要的值, 但某些名称可用于配置服务器的行为。 这些特殊名称列在应用程序设置表.

Calling app.set('foo', true)对于布尔属性来说是一样的 呼叫app.enable('foo')。同样,调用app.set('foo', false)对于布尔属性与调用相同app.disable('foo').

检索设置的值app.get().

来源:https://expressjs.com/en/api.html#app.set

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

在快速路由文件中使用 socket.io 的相关文章

随机推荐

  • 如何检查 iOS 上的 React Native 应用程序的网络流量?

    I m using the latest React Native 0 18 at the time of this writing and would like to inspect the network requests my iOS
  • 在一个 Android 应用上接收来自两个 Firebase 项目的推送通知

    我有一个 Android 应用程序 我希望它能够接收来自两个不同 Firebase 项目的推送通知 我阅读了博客 在 Android 应用程序中使用多个 Firebase 项目 https firebase googleblog com 2
  • 如何在Java中获取给定类的数组类?

    我有一个Class保存某种类型的变量 我需要获取一个保存相应数组类的变量 我能想到的最好的办法是 Class arrayOfFooClass java lang reflect Array newInstance fooClass 0 ge
  • Video.play 返回 DirectShowPlayerService::doSetUrlSource:未解决的错误代码 800c000d

    使用 Qt 版本 5 4 2 返回的错误代码 DirectShowPlayerService doSetUrlSource 未解决的错误代码 800c000d 已使用视频 QML 类型编写了 QML 文件 如下所示 我在项目文件 pro 中
  • 使用带有泛型的语句:using ISet<> = System.Collections.Generic.ISet<>

    由于我使用两个不同的通用集合命名空间 System Collections Generic and Iesi Collections Generic 我有冲突 在项目的其他部分 我同时使用 nunit 和 mstest 框架 但当我调用时限
  • 为什么这个汇编程序会输出相同的字符串两次?

    此凯撒密码程序生成解密字符串 长度始终为 10 并输出为 output txt 文件 例如下面的代码创建 txt 文件 ILIKEASSEM HOWAREYOUU 但是当我运行这段代码时 该文件是 ILIKEASSEM ILIKEASSEM
  • 除以零后的余数

    我知道数学中不允许除以零 但是我可以使用零模吗 我应该得到什么答案 例如 10 0 5 0 标准将其定义为 未定义 在几乎所有处理器中 求模都是通过与除法相同的功能来执行的 在现代较大的处理器中 它是一条指令 例如 x86 大多数情况下 该
  • CSS 选择器中的空格

    在选择器中 空格可以指示后代 不过 我发现空格也可以忽略 根据我的测试 这就是我的think它的意思是 周围可以使用空格 和上下文字符 例如 and gt 空格可能not用于伪类和元素字符 and 以及属性选择器 空格可能not与类和 id
  • 链接服务器 SQLNCLI 问题。 “没有活跃的交易”

    我尝试执行存储过程并将其结果简单地插入到临时表中 并且收到以下消息 无法执行该操作 因为 OLE DB 提供程序 SQLNCLI 对于链接服务器 MyServerName 无法开始分布式 交易 用于链接服务器的 OLE DB 提供程序 SQ
  • 使用 CSS 无限移动多个背景

    我有两个背景 body background image url img nemo png url img ocean png 我该如何制作nemo png background左右无限移动但不影响ocean png background
  • 如何使用外部 CSS 覆盖内联样式?

    我有使用内联样式的标记 但我无权更改此标记 如何仅使用 CSS 覆盖文档中的内联样式 我不想使用 jQuery 或 JavaScript HTML div style font size 18px color red Hello World
  • 报告长期运行的 Celery 任务的结果

    Problem 我已将长时间运行的任务分割为逻辑子任务 因此我可以在每个子任务完成时报告其结果 然而 我试图报告一项实际上永远不会完成的任务的结果 而不是在进行过程中产生值 并且正在努力使用我现有的解决方案来做到这一点 背景 我正在为我编写
  • 如何在满足给定条件时终止Python中的多进程? [复制]

    这个问题在这里已经有答案了 假设我有这个功能 def f while True x generate something if x condition return x if name main p Pool 4 我想在多进程中运行此函数
  • 使用clone()和printf的段错误

    我正在尝试如何clone 在 Linux 3 10 0 327 3 1 el7 x86 64 中为线程实现 我正在运行这段代码 偶尔会出现段错误 我知道如果我使用CLONE THREAD那么就没有办法检查线程是否完成 但是为什么printf
  • 如何让列表视图只显示3个项目

    我有一个列表视图 其中正在加载 10 个项目 我希望滚动时只显示 3 个项目 我不想通过调整列表高度来做到这一点 即使滚动很小 意味着没有项目应该部分显示 我也只想显示 3 个项目 如何实现这一目标 提前致谢 我将发布一个代码 我用它来填充
  • Android ListActivity行点击

    我有一个显示有关玩家的信息的活动 这部分工作正常 我使用了适配器 但是我应该将检测行何时被单击的代码放在哪里 PlayersActivity java package com democratandchronicle billstraini
  • 保存自定义首选项的值

    我创建了一个新的首选项 它直接延伸自CheckboxPreference 在这个类中我添加了一个简单的新boolean价值 我现在的问题是如何存储这个新值 如果用户点击正常CheckboxPreference该值自动存储在首选项中 我希望这
  • 图例与饼图重叠

    在 python 中使用 matplotlib 图例与我的饼图重叠 尝试了 loc 的各种选项 例如 最佳 1 2 3 但无济于事 关于如何准确提及图例位置 例如从饼图边界给出填充 或至少确保它不重叠有什么建议吗 简短的回答是 您可以使用p
  • firebase 从 firestore js sdk 缓存检索文档是否收费

    我正在使用 firebase JS SDK 离线持久化已启用 这会自动将我检索到的文档缓存在 JS SDK 中 我执行这个查询 once firebase firestore doc path to doc get twice fireba
  • 在快速路由文件中使用 socket.io

    我正在尝试将 Socket io 与 Node js 结合使用 并发送到路由逻辑内的套接字 我有一个相当标准的 Express 3 设置 其中有一个位于路由中的 server js 文件 然后我有一个位于路由文件夹中的 index js 该