node.js - 是否有可能仅将 socket.io 用于应用程序的特定部分?
问题描述
我是 socket.io 的新手。只是我想知道是否有可能将套接字用于应用程序的某些部分,其余部分继续使用普通的 http RESTful API?
更具体地说,我已经开发了一个应用程序,其中 ionic 5 用于前端和 nodejs,express 和 mongodb 用于后端。
我已将 socket.io 添加到我的 app.js 文件中,如下所示,并且服务器正在侦听。
const app = express();
const port = process.env.PORT || 5000;
const http = require("http");
const server = http.createServer(app);
const io = require("socket.io")(server);
io.on('connection',(socket)=>{
console.log('a user connected')
socket.on('disconnect', function(){
io.emit('user-changed', {user:socket.username,event:'left'});
})
socket.on('comment',(comment)=>{
console.log(comment)
io.emit('comment',{cmt: comment.text,user:socket.username, createdAt: new Date()})
})})
我的讨论 API 路由文件
const express = require("express");
const router = require("express-promise-router")();
const discussionController = require("../controllers/discussion.controller");
const auth = require("../../helpers/auth");
router.route("/").get(discussionController.getAllDiscussions);
router.route("/discussion/:id").get(discussionController.getDiscussion);
router.route("/comment").post(auth, discussionController.createComment);
router.route("/comments/:id").get(auth, discussionController.getComments);
router.route("/search/:params").get(auth, discussionController.searchDiscussion);
router.route("/create-discussion").post(auth,discussionController.createDiscussion);
module.exports = router;
我的控制器文件
const mongoose = require("mongoose");
const Discussion = require("../../models/discussion.model");
const Comment = require("../../models/comment.model");
module.exports = {
getAllDiscussions: async (req, res, next) => {},
getDiscussion: async (req, res, next) => {},
getComments: async (req, res, next) => {},
createDiscussion: async (req, res, next) => {},
createComment: async (req, res, next) => {},
searchDiscussion: async (req, res, next) => { }
};
同样在我的 app.module n 前面,我添加了 SocketIoModule 和 Config,如下所示。
import { SocketIoModule, SocketIoConfig } from 'ngx-socket-io';
const config: SocketIoConfig = { url: 'http://localhost:5000', options: {} };
所以,一切正常,我也可以从讨论页面发送和接收评论。我想要的是仅为讨论页面而不是整个应用程序打开套接字的可能性,以及如何与我的服务器端控制器集成以保存到数据库中并检索它。
解决方案
推荐阅读
- google-apps-script - 将 Google 文件发送到电子邮件
- airflow - 如何设置仅在某个 dag_run 期间使用的变量
- azure - 在 Azure 中的大量 VM 上进行 CodedUI 测试
- pandas - Pandas 确实基于字段进行汇总
- python - Jinja2 - 复制变量而不是引用它
- google-app-engine - 是否可以从另一个项目连接到 Google Cloud Memorystore?
- google-sheets - 如何在 Google 表格中选择正确的范围
- angular - 我的 vs 代码中的自动导入为 rxjs 运算符和 CanActivate 接口建议了模棱两可的导入语句
- python - 如何组合来自多个文件的多行并将它们放入数组
- django - 为什么 React 不显示任何数据?