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

Express开发仪表盘页面报错TypeError: req.next is not a function求助

问题原因

你在dashboard.js的路由逻辑中存在**重复调用res.render()**的问题:你对admin配置数组做循环遍历,每一轮循环都会触发一次res.render(),而Express的响应方法(res.render/res.send/res.redirect等)仅允许调用一次,多次调用会破坏请求上下文的内部结构,最终触发TypeError: req.next is not a function报错。

修复方案

1. 优化admin判断逻辑,避免重复调用res.render

不需要循环遍历admin列表判断用户权限,直接用数组的includes方法校验用户id是否在admin列表内即可,修改dashboard.js的两个路由代码:

// 根仪表盘路由修改
router.get('/', isAuthorized, (req, res) => {
    database.sql("SELECT * FROM servers", (rows) => {
        // 直接判断当前用户id是否在admin配置数组中
        const isAdmin = data.includes(String(req.user.id))
        res.render('dashboard/dashboard', {
            guilds: req.user.guilds,
            servers: rows,
            user: req.user,
            admin: isAdmin
        })
    })
})

// admin子页面路由修改
router.get('/admin', isAuthorized, (req, res) => {
    database.sql("SELECT * FROM servers", (rows) => {
        const isAdmin = data.includes(String(req.user.id))
        // 非admin用户可以直接跳走或者返回无权限,按需调整
        if (!isAdmin) return res.redirect('/dashboard')
        res.render('admin/admin', {
            guilds: req.user.guilds,
            servers: rows,
            user: req.user,
            admin: isAdmin
        })
    })
})

2. 修复配置文件解析错误(潜在问题)

你当前读取的是.yaml后缀的配置文件,却使用JSON.parse解析,格式不匹配会导致解析报错。如果你的配置文件确实是YAML格式,需要安装js-yaml依赖后修改解析逻辑:

npm install js-yaml

修改配置读取代码:

const yaml = require('js-yaml')
const dirAdmin = __dirname + `/../public/config/admin.yaml` // 原路径多了冗余的.,同步修正
const data = yaml.load(fs.readFileSync(dirAdmin, 'utf8'))

3. 补全deserializeUser逻辑(潜在问题)

当前passport.deserializeUser逻辑中如果未查到匹配用户,没有调用done回调,会导致请求无限挂起,修改如下:

passport.deserializeUser(async (id, done) => {
    console.log("Deserializing")
    try {
        const user = await User.findOne({ where: { id: id } })
        done(null, user || null)
    } catch (err) {
        done(err, null)
    }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:27:02