执行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
相关产品推荐
相关产品推荐

