【问题标题】:How to import socket.io npm packege - Nodejs如何导入 socket.io npm 包 - Node Js
【发布时间】:2020-12-06 05:09:49
【问题描述】:

知道为什么我会出错吗?

  import Server from 'socket.io';
  const socketio = new Server();

错误

import Server from 'socket.io';
       ^^^^^^
SyntaxError: The requested module 'socket.io' does not provide an export named 'default'

【问题讨论】:

  • 应该是import * as io from 'sockt.io'
  • const app = express(); const server = createServer(app); const socketio = io(server); 我仍然收到以下错误const socketio = io(server); ^ TypeError: io is not a function
  • 这能回答你的问题吗? Pass options to ES6 module imports
  • 很遗憾没有

标签: javascript node.js socket.io


【解决方案1】:

有两种导出:命名导出(每个模块多个)和默认导出(每个模块一个)。可以同时使用两者,但通常最好将它们分开。

您为什么会收到此错误:您编写的导入语句提供了Server,这不是默认导出。如果socket.io实际上已经如下导出了Server,那么你就不会得到错误。

module.exports = {
  //Other exports
  Server as default
}

你可以这样做:

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);

编辑:

你可以像这样导入socket.io:

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);

【讨论】:

  • 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);
  • 这里是错误const socketio = io(server); ^ TypeError: io is not a function
  • 像那时一样导入它:import { io } from 'socket.io'
  • import { io } from 'socket.io'; ^^ SyntaxError: The requested module 'socket.io' does not provide an export named 'io'
  • 当我尝试这种方法时,我只是得到 io.Server is not a constructor 错误.. =/任何想法可能导致这种情况?
【解决方案2】:

我不敢相信 Socket.io 让导入他们的 npm 包变得如此困难。

这就是答案。谢谢@MeghAgarwal

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);

【讨论】:

    【解决方案3】:

    从 v3 开始,正确的做法是:

    
    const httpServer = require('http').createServer((req, res) => {
      res.setHeader('Content-Type', 'text/html');
      res.setHeader('Content-Length', Buffer.byteLength(content));
      res.end(content);
    });
    // Or const httpServer = require('http').createServer(app) if you use express
    
    const io = require('socket.io')(httpServer);
    

    如果你import * as io from 'socket.io',你必须打电话给io.io(httpServer)。我遇到了同样的错误

    【讨论】:

    • 这就是我所做的const app = express(); const server = createServer(app); // socketio const socketio = io(server);
    • const server = require('http').createServer(app) 可以解决问题@John
    • 我需要使用import
    • 我也使用了import * as io from 'socket.io' ,但我不得不使用const socket = new io.Server(server, . . . . .
    【解决方案4】:

    我遇到了同样的错误。这对我有用

    const express = require('express');
    const app = express();
    
    const io = require("socket.io")(80);
    const http = require("http");
    const server = http.createServer(app);
    

    【讨论】:

      猜你喜欢
      • 2019-08-28
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 2020-06-11
      • 2020-03-06
      • 1970-01-01
      相关资源
      最近更新 更多