[英]How to import Socket.io using import - Nodejs
Not sure why I am getting the error.不知道为什么我收到错误。 When I try to do the same thing by using request
it works fine.当我尝试使用request
做同样的事情时,它工作正常。
import express from 'express';
import { createServer } from 'http';
import * as io from 'socket.io';
const app = express();
const server = createServer(app);
const socketio = io(server);
Error错误
const socketio = io(server);
^
TypeError: io is not a function
You should try this instead你应该试试这个
import { Server } from "socket.io";
const httpServer = createServer();
const io = new Server(httpServer, {
// ...
});
Check it out here Socket.io Initialization在这里查看Socket.io 初始化
Here is the answer这是答案
import { Server } from 'socket.io';
import express from 'express';
import { createServer } from 'http';
const app = express();
const server = createServer(app);
const socketio = new Server(server);
Here's a better and more professional 2021 approach for the use of Socket.io with Express and ES modules initialization:这是使用 Socket.io 和 Express 和 ES 模块初始化的更好和更专业的 2021 方法:
Here you can see the import and initialization inside the file Socket.js :在这里您可以看到文件Socket.js中的导入和初始化:
import { Server } from 'socket.io';
class SocketServer {
constructor(server) {
const io = new Server(server);
this.socket = io.of('/session').on('connection', (socket) => {
const chatApiInstance = JSON.parse(
socket.handshake.query.chatApiInstance
);
if (chatApiInstance) {
socket.join(chatApiInstance);
}
});
}
onNewMessage(chatApiInstance, message) {
this.socket.to(chatApiInstance).emit('newMessage', JSON.stringify(message));
}
onStatusUpdate(chatApiInstance, status) {
this.socket.to(chatApiInstance).emit('statusChange', status);
}
}
export default SocketServer;
And then in your Server.js, you should import Socket.js like this:然后在你的 Server.js 中,你应该像这样导入 Socket.js:
import app from './app';
import SocketServer from './socket';
const server = app.listen(process.env.PORT || 3333, '0.0.0.0');
const Socket = new SocketServer(server);
export default Socket;
Then you need a Controller to handle this requisition, like this one:然后你需要一个 Controller 来处理这个申请,就像这个:
import Socket from '../../server';
class SessionController {
async create(request, response) {
const { instanceId, messages, status } = request.body;
if (messages && messages.length) {
Socket.onNewMessage(instanceId, messages[0]);
} else if (status) {
Socket.onStatusUpdate(instanceId, status);
}
return response.send('OK');
}
}
export default new SessionController();
Lastly, don't forget to add the route, like this:最后,不要忘记添加路线,如下所示:
import { Router } from 'express';
import SessionController from '../Controllers/SessionController';
const sessionRouter = Router();
sessionRouter.post('/', SessionController.create);
export default sessionRouter;
Check more here for the initialization of the v3 of Socket.io: https://socket.io/docs/v3/server-initialization/index.html在此处查看更多关于 Socket.io 的 v3 的初始化: https://socket.io/docs/v3/server-initialization/index.html
Try this:尝试这个:
import * as io from "socket.io"
import express from 'express';
import { createServer } from 'http';
const app = express();
const server = createServer(app);
const socketio = new io.Server(server);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.