You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

连接Redis Cluster时出现SyntaxError: Unexpected token '.'错误的解决方法

问题

使用Redis Enterprise提供的代码连接数据库,运行node index.js时出现SyntaxError: Unexpected token '.'错误,Node.js版本为v12.22.9。

相关代码

index.js

import { createCluster } from 'redis';
import { readFileSync } from 'fs';

const cluster = createCluster({
    rootNodes: [{
            url: 'rediss://redis.cloud.com:6379'
            }],
    defaults: {
            password: 'abc',
        socket: {
        tls: true,
            ca: [readFileSync('~/redis_ca.pem')]
        }}});

package.json

{
  "name": "redis-demo",
  "version": "1.0.0",
  "description": "",
  "main": "redis-demo.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "run": "node index.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "redis": "^4.6.7"
  }
}

错误信息

$ node index.js
/home/rnatarajan/node-redis-demo/node_modules/redis/dist/index.js:42
       ...options?.modules
                  ^
SyntaxError: Unexpected token '.'
at wrapSafe (internal/modules/cjs/loader.js:915:16)
at Module._compile (internal/modules/cjs/loader.js:963:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at ModuleWrap. (internal/modules/esm/translators.js:188:29)
at ModuleJob.run (internal/modules/esm/module_job.js:145:37)
at async Loader.import (internal/modules/esm/loader.js:182:24)
at async Object.loadESM (internal/process/esm_loader.js:68:5)

解决方案

错误核心原因是Node.js v12.22.9不支持可选链操作符(?.),而你安装的redis@4.6.7内部代码使用了该语法,导致运行报错。有两种修复方式:

方案1:升级Node.js版本

redis@4.x要求Node.js版本至少为v14.14.0或更高。直接升级Node.js到v14及以上的LTS版本(比如v18.x),之后重新运行node index.js即可解决问题。

方案2:降级redis到兼容Node.js v12的版本

若无法升级Node.js,可将redis包降级到v3.x版本,该版本兼容Node.js v12。操作步骤:

  1. 卸载当前redis包:
npm uninstall redis
  1. 安装v3.x版本的redis:
npm install redis@3
  1. 修改index.js适配v3.x的API(v3使用CommonJS规范,需调整代码):
const Redis = require('redis');
const fs = require('fs');

const cluster = new Redis.Cluster([{
    host: 'redis.cloud.com',
    port: 6379
}], {
    redisOptions: {
        password: 'abc',
        tls: {
            ca: [fs.readFileSync('~/redis_ca.pem')]
        }
    }
});

同时移除package.json中的"type": "module"字段。

内容的提问来源于stack exchange,提问作者user51

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:42:49