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

Sequelize修改create查询为回调结构后无法返回响应的问题

Sequelize回调写法插入数据成功但无响应的解决方法

我将Sequelize的Promise风格代码改成回调结构后,数据能成功插入数据库,但接口无法返回响应。

原Promise代码:

Model = require('../models/Salesman')
module.exports.creareSalesman = (req, res, next) => {
Model.create(req.body).then(
    result => {
        res.status.json({data: result})
    }).catch(err => console.log(err))
}

修改后的回调代码(存在问题):

Model = require('../models/Salesman')
module.exports.creareSalesman = (req, res, next) => {
    Model.create(req.body, function (result, err) {
        if (err) {
            console.log(err)
        }
        else {
            res.status.json({data: result})
        }
    });
}

问题原因

Sequelize的回调函数遵循Node.js错误优先的规范,参数顺序是err在前,result在后。你把参数顺序写反了,导致:

  • 插入成功时,回调里的result实际是undefined,err才是插入后的结果对象,代码进入if (err)分支只打印结果,没有返回响应;
  • 插入失败时,result是错误对象,err是undefined,代码进入else分支尝试返回undefined的result,同样无法正常响应。

修复代码

修正回调参数顺序,同时完善错误处理(给前端返回错误响应,避免请求挂起):

Model = require('../models/Salesman')
module.exports.creareSalesman = (req, res, next) => {
    Model.create(req.body, function (err, result) {
        if (err) {
            console.log(err);
            // 返回错误响应给前端
            return res.status(500).json({error: err.message});
        }
        // 成功时返回数据
        res.status(200).json({data: result});
    });
}

补充说明

  • 错误优先回调是Node.js生态的通用规则,大部分Node.js库的回调都遵循此规范;
  • 错误分支必须返回响应,否则客户端请求会一直处于pending状态,直到超时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:55:14