Sequelize模型不会返回,然后阻止

时间:2018-10-17 18:58:38

标签: express sequelize.js

如果续集正确更新,我正尝试将结果返回给我的控制器。它在当前代码中有效,但是无论失败还是有效,我只能返回true。

我尝试了几种我认为可行的方法,但是除非我硬编码“ return true”,否则一切都将在控制器中返回未定义的

控制器

const {promisify} = require('util');
const pageSection = promisify(db.pageSection);

exports.updateForm = async function (req, res) {

let result;

try {
   result = await pageSection.updateSection(req);
} catch (err) {
    console.log('** NOT GOOD **', err);
}

   return res.send(result);
}

模型

pageSection.updateSection = function (req) {

    var result;

    pageSection.update ({
        title: req.body.title,
        description: req.body.description,
        icon: req.body.icon
    }, {
        where: {
            id: req.body.id
        }
    })
    .then( updatedRow => {  
        return updatedRow; //Undefined in controller

        sendResult( updatedRow ); //Still undefined

        result = updatedRow; // Still undefined
    })
    .catch(err => {
        console.log('Page Model Error: ', err);
    })

    function sendResult ( updatedRow ) {
       if ( updatedRow ) { return true }

    } //Returns undefined

    return true; //Only thing that works

    return result; //Undefined


}

1 个答案:

答案 0 :(得分:0)

(如果使用的是postgres),则需要添加

returning: true,
plain: true

紧接where子句之后的查询,以便实际返回更新的数据行,设置plain:true可确保返回的是普通对象。

所以现在它将变成:

pageSection.update ({
        title: req.body.title,
        description: req.body.description,
        icon: req.body.icon
    }, {
        where: {
            id: req.body.id
        },
        returning: true,
        plain: true
    })

返回的结果是一个数组,因此您需要访问返回的数组的第二个元素以获取更新的行。