В моем приложении express, созданном с помощью express-generator
, я хочу использовать io
из socket.io
в некоторых других файлах контроллера для отправки данных в клиентские сокеты. Мой подход ниже, но я получаю следующую ошибку. Было бы очень хорошо, если бы кто-нибудь мог мне помочь в этом случае.
(node: 11376) UnhandledPromiseRejectionWarning: TypeError: io.emit не является функцией в F: \ backend \ controllers \ LessonController. js: 169: 9
В приложениях express, сгенерированных express-generator
, процесс создания сервера происходит в /bin/www.js
. Я попытался импортировать оттуда экземпляр io
и использовать его в другом файле, но это не сработало.
bin / www.js
#!/usr/bin/env node
var app = require('../app');
var debug = require('debug')('backend:server');
var http = require('http');
var port = normalizePort(process.env.PORT || '8080');
app.set('port', port);
var server = http.createServer(app);
const io = require('socket.io')(server);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
// several other functions are omitted for brevity
module.exports = io;
LessonController. js
const Lesson = require('../models/Lesson');
const Course = require('../models/Course');
const User = require('../models/User');
const io = require('../bin/www')
var _ = require('lodash');
module.exports = {
addComment: async (lessonId, userId, content, callback) => {
const newData = {
comments: {
user: userId,
content: content,
},
};
Lesson.findOneAndUpdate({ _id: lessonId }, { $push: newData }, {new: true})
.exec()
.then(
function (data) {
if (data) {
io.emit("comment_"+lessonId,data)
callback(null, data);
} else if (err) {
callback(err, null);
}
}
)
}
};