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

使用Sequelize、SQLite、VueJs时服务误调控制器错误方法

问题根源

你遇到的核心问题是路由定义冲突:在routes.js中,你给同一个GET /programms路径绑定了两个控制器方法:

app.get('/programms', ProgrammController.index)
app.get('/programms', ProgrammController.indexRadar)

Express的路由匹配是按定义顺序执行的,一旦第一个路由规则匹配成功,就会直接执行对应的index方法,不会再往后检查第二个规则。所以不管你的Service里传什么参数,只要是GET /programms请求,都会触发index方法(打印"wrong destination")。

解决方案

这里提供两种可行的修复方式,选一种适合你的即可:

方式1:给indexRadar设置独立路由路径

修改routes.js,给indexRadar分配一个唯一的路径:

// 替换原来的两个GET /programms路由
app.get('/programms', ProgrammController.index)
app.get('/programms/radar', ProgrammController.indexRadar) // 新增独立路径

然后修改ProgrammService.js里的indexRadar方法,请求对应的新路径:

indexRadar (radar) {
    console.log('indexRadar Service')
    return Api().get('programms/radar', { // 修改路径
        params: {
            radar: radar
        }
    })
}

方式2:在同一个index方法中分支处理逻辑

如果不想修改路由路径,可以在ProgrammController.js的index方法里,根据请求参数判断执行哪段逻辑:

async index (req,res) {
    // 检查是否携带radar参数
    if (req.query.radar) {
        console.log('right destination')
        // 这里写原来indexRadar方法里的逻辑
        // ...
    } else {
        console.log('wrong destination')
        // 这里写原来index方法里的逻辑
        // ...
    }
}

同时可以删除routes.js里重复的app.get('/programms', ProgrammController.indexRadar),以及控制器里的indexRadar方法(或者保留但不再通过路由调用)。

额外说明
  • 浏览器控制台打印"indexRadar Service"是因为Service的indexRadar方法确实被调用了,但发送的请求路径还是/programms,被第一个路由拦截了。
  • 服务器没打印"just index Service"是因为你这次请求没调用Service的index方法,和路由问题无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:15:40