Express使用flash模块触发循环结构转JSON报错如何解决
Express消息闪现循环结构报错解决方案
核心问题原因
你引入的flash依赖包是废弃的旧版实现,正确的Express生态消息闪现依赖是connect-flash,旧flash包会把请求对象上包含循环引用的Socket实例存入session,序列化时就会触发你遇到的报错,和你是否引入flatted无关。
修复步骤
- 卸载错误依赖:
npm uninstall flash
- 安装正确依赖:
npm install connect-flash
- 修改代码:删除所有flatted相关的冗余代码,替换flash的引入语句,调整flash返回值的取值逻辑:
const express = require('express'); const session = require('express-session'); // 替换为正确的connect-flash引入 const flash = require('connect-flash'); const app = express(); const port = process.env.PORT || 4000; app.use(session({ secret:'geeksforgeeks', saveUninitialized: true, resave: true })); app.use(flash()); app.get('/', (req, res) => { req.flash('message', 'Success!!'); res.redirect('/gfg'); }); app.get('/gfg', (req, res) => { // req.flash返回的是数组,取第一个元素即为存储的字符串 res.send(req.flash('message')[0]); }); app.listen(port, (err) => { if (err) console.log(err); console.log('Server is up and listening on', port); });
额外说明
你引入的flatted库没有生效的原因是你没有替换express-session默认的JSON序列化逻辑,而使用正确的connect-flash包后不会产生循环引用的问题,完全不需要额外引入序列化处理库。
内容的提问来源于stack exchange,提问作者Mrinal Anand
相关产品推荐
相关产品推荐

