Есть ли возможность использовать socket.io только для определенной c части приложения? - PullRequest
0 голосов
/ 02 апреля 2020

Я довольно новый в socket.io. Просто я хочу знать, есть ли возможность использовать сокет для определенной части приложения, а остальные продолжают работать с обычным http RESTful API?

Чтобы быть более точным c, я разработал приложение с ioni c 5 для внешнего интерфейса и nodejs, express и mongodb для внутреннего интерфейса.

Я добавил socket.io в свое приложение. Файл 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: {} };

Итак, все работает нормально, и я могу отправлять и получать комментарии со страницы обсуждения. То, что я хочу, это возможность открытия сокета только для страницы обсуждения, а не приложения enitre, а также как я могу интегрироваться со своим контроллером на стороне сервера для сохранения в базу данных и ее извлечения.

...