Ошибка типа: io.emit не является функциейJavascript

Форум по Javascript
Ответить
Гость
 Ошибка типа: io.emit не является функцией

Сообщение Гость »


Я объявил io в файле index.js (основной файл. И я хочу отправлять обновления клиенту внутри контроллеров/devices.js. но при тестировании это дает

TypeError: io.emit не является функцией в handleUpdateDevice (/home/parthkamal/Documents/development/tekunkorked-server/controllers/device.js:84:12) в процессе.processTicksAndRejections (узел: внутренний/процесс/задача_очереди: 95:5) (узел: 98489) Предупреждение: доступ к несуществующему свойству «emit» экспорта модуля внутри циклической зависимости. (Используйте `node --trace-warnings ...`, чтобы показать, где было создано предупреждение) узел: внутренний/ошибки: 496 ErrorCaptureStackTrace (ошибка); ^ controllers/devices.js

const Device = require('../models/device'); const io = require('../index'); // другие функции const handlePostDevice = async (запрос, ответ) => { пытаться { const {имя, местоположение, температура} = request.body; console.log(request.body); console.log({имя, местоположение, температура }); const newDevice = новое устройство({имя, местоположение, температура}); ожидайте newDevice.save(); response.status(200).json({ message: «устройство успешно добавлено» }); const устройства = ждут Device.find(); io.emit('data-created', {устройства}); } поймать (ошибка) { console.log(ошибка); ответ.статус(400).json({ошибка}); } } const handleUpdateDevice = async (запрос, ответ) => { пытаться { const {id} = request.params; константные обновления = request.body; console.log(обновления); дождитесь Device.findByIdAndUpdate(id, обновления); response.status(200).json({ message: «обновлено успешно» }); const устройства = ждут getDevices(); io.emit('обновление данных', {устройства}); } поймать (ошибка) { console.log(ошибка); ответ.статус(400).json({ошибка}); } } модуль.экспорт = { получитьУстройства, ручкаGetDevices, дескрипторGetDevicesById, ручкаPostDevice, handleUpdateDevice } Моя структура каталогов такая:
Изображение


index.js

const express = require('express'); const http = require('http'); const cors = require('cors'); const dotenv = require('dotenv'); const { getDevices } = require('./controllers/device') const createDbConnection = require('./db'); constocketIo = require('socket.io'); константное приложение = экспресс(); константный сервер = http.createServer(приложение); const io = socketIo(server, { корс: { происхождение: "http://localhost:3000", } }); дотенв.конфигурация(); константный ПОРТ = процесс.env.PORT; const corsOptions = { происхождение: 'http://localhost:3000', }; //промежуточное ПО app.use(cors(corsOptions)); app.use(express.json()); //маршруты const deviceRoute = require('./routes/device'); app.use('/device', deviceRoute); io.on('соединение', асинхронный (сокет) => { console.log(`пользователь с идентификатором сокета ${socket.id} подключен`); пытаться { const устройства = ждут getDevices(); сокет.emit('данные', {устройства}); } поймать (ошибка) { console.log('connection ke dauran devices fetch karne me error agya'); } socket.on('отключить', () => { console.log('Пользователь отключен'); }); }); //соединение с БД создатьDbConnection(); app.get('/', (req, res) => { res.send('привет от сервера tekuncorked'); }); server.listen(PORT, () => { console.log(`сервер прослушивает порт ${PORT}`); }); модуль.экспорт = io; Я думаю, что возникла проблема с экспортом модуля io. контроллеру. как мне этого добиться?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»