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

执行docker-compose up命令时触发SyntaxError: Unexpected identifier 'port'错误

问题解决:Node.js Redis客户端语法错误(Unexpected identifier 'port')

错误分析

执行docker-compose up时Node.js服务启动失败,报错指向index.js第7行的port字段,提示SyntaxError: Unexpected identifier 'port'。核心原因是你使用的是Redis客户端v4+版本,但代码采用了v3及以下版本的配置写法——v4+已废弃直接在createClient配置对象中使用host和port的方式,导致语法解析失败。

修复步骤

1. 修改Redis客户端初始化代码

将原有的redis.createClient配置替换为v4+兼容的写法,二选一即可:

方案A:使用URL字符串统一配置

const express = require('express');
const redis = require('redis'); // 补充const声明,避免全局变量污染

const app = express();
const client = redis.createClient({
  url: 'redis://redis-server:6379' // 用URL格式指定Redis服务地址和端口
});

// v4+版本必须手动调用connect()建立连接
client.connect().catch(console.error);

// 异步操作建议添加错误捕获
client.set('visitor', 0).catch(console.error);

app.get('/', (req, res) => {
  client.get('visitor').then(visitor => {
    res.send('访问次数:' + visitor);
    return client.set('visitor', parseInt(visitor) + 1);
  }).catch(err => {
    console.error(err);
    res.status(500).send('服务器错误');
  });
});

app.listen(8081, () => {
  console.log('监听端口8081');
});

方案B:使用socket配置对象拆分参数

const express = require('express');
const redis = require('redis');

const app = express();
const client = redis.createClient({
  socket: {
    host: 'redis-server',
    port: 6379
  }
});

client.connect().catch(console.error);

// 后续业务代码同方案A

2. 重新构建并启动服务

修改代码后,执行以下命令重启服务:

docker-compose down
docker-compose up --build

额外注意事项

  • 原代码中redis = require('redis');未声明const,会创建全局变量,建议补充声明避免潜在问题。
  • v4+版本的Redis客户端API默认返回Promise,建议替换原回调写法为Promise/async-await,提升代码可读性和错误处理能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:13:13