connect-redis 7.0.1 出现错误 [ERR_REQUIRE_ESM]

问题描述 投票:0回答:1

节点版本:16.20.2 连接redis版本:7.0.1 ESM版本:3.2.25 Redis版本:3.0.2 快速会话版本:1.17.3

我在我的节点应用程序中收到

connect-redis
的 ERR_REQUIRE_ESM 错误。我尝试为 redis、connect-redis 和 esm 安装不同版本。但对我来说没有任何作用。请帮我提供解决方案。为了让您更好地理解,我在这里分享相关的代码块。

错误:

/Users/user/bidyaguru/bg-cpanel-app/server.js:1
Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/user/project/myapp/node_modules/connect-redis/dist/esm/index.js not supported.
Instead change the require of index.js in null to a dynamic import() which is available in all CommonJS modules.
    at Object.<anonymous> (/Users/user/project/myapp/server.js:1)
    at Generator.next (<anonymous>) {
  code: 'ERR_REQUIRE_ESM'
}

我的package.json文件:

{
  "name": "myapp",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "server": "node -r esm server.js",
    "dev": "nodemon -r esm server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "connect-redis": "^7.1.0",
    "dotenv": "^16.3.1",
    "esm": "^3.2.25",
    "express": "^4.18.2",
    "express-session": "^1.17.3",
    "mongoose": "^6.9.2",
    "redis": "^3.0.2"
  }
}

我的server.js文件:

import express from 'express';
import dotenv from 'dotenv';
import expressSession from'express-session';
import {createClient} from "redis";
import RedisStore from "connect-redis";

import connectDB from './config/db';


dotenv.config();
connectDB();
const app = express();
app.use(express.json());

app.get('/_status', (req, res) => {
  res.send('Server is okay');
});

// Initialize redis client.
const redisHost = process.env.REDIS_HOST
const redisPort = process.env.REDIS_PORT || 6379;
let redisClient = createClient(redisHost, redisPort);
redisClient.connect().catch(console.error)

// Initialize redis store.
let redisStore = new RedisStore({
  client: redisClient,
  prefix: "myapp:",
})

// Initialize redis sesssion storage.
app.use(
  expressSession({
    store: redisStore,
    resave: false,
    saveUninitialized: false,
    secret: "secret",
    cookie: { maxAge: (1000 * 60 * 60 * 24 * 30) }
  })
);


const PORT = process.env.PORT || 3001;
app.listen(PORT, (err) => {
  if (err) { process.exit(1); }
  console.log(`Service is running at port ${PORT}`);  
});

express redis es6-modules connect-redis
1个回答
0
投票

看起来您想使用 ESM,因此请使用您的 Node.js 版本提供的本机支持。

  1. 卸载
    esm
    软件包。
  2. 在 package.json 文件中设置
    "type": "module"
  3. 从 npm 脚本中删除
    -r esm
  4. 重命名您的 relative 导入以包含
    .js
    扩展名,例如
    import connectDB from './config/db.js';

现在尝试运行 dev

npm run dev

您可以在 GitHub 上的

busmap
存储库中查看将 ESM 与 connect-redis 结合使用的工作示例。

© www.soinside.com 2019 - 2024. All rights reserved.