Javascript 未调用Sequelize事务处理方法

Javascript 未调用Sequelize事务处理方法,javascript,express,web,transactions,sequelize.js,Javascript,Express,Web,Transactions,Sequelize.js,我不熟悉express/node并使用Sequelize作为ORM 我正在尝试创建一个列表,一旦创建了列表,我想更新item表中的item.isListed boolean,但是我很难调用事务方法-有人能告诉我这段代码有什么问题吗 /api/listing var models = require('../../models'); var router = require('express').Router(); router.route('/:id') .post(function

我不熟悉express/node并使用Sequelize作为ORM

我正在尝试创建一个列表,一旦创建了列表,我想更新item表中的item.isListed boolean,但是我很难调用事务方法-有人能告诉我这段代码有什么问题吗

/api/listing

var models = require('../../models');
var router = require('express').Router();

router.route('/:id')

    .post(function(req,res){


        models.Item.findOne({
            where : {
                itemID : req.params.id
            }
        }).then(function(item){
            if (item){
                if (item.owner != req.decoded.user.username){
                    res.json({message:"not your item"})
                } else {

                    //This message is displayed in console.
                    console.log("entering transaction");

                    return models.db.sequelize.transaction(function(t){

                        //This message is not displayed in console.
                        console.log("inside transaction")

                        return models.Listing.create({
                            sellerID : req.decoded.user.username,
                            startDate : req.body.startDate,
                            endDate : req.body.endDate,
                            startPrice : req.body.startDate,
                            reservePrice : req.body.reservePrice,
                            isSold : 0,
                            itemID : req.params.id
                        }, {transaction: t}).then(function(t){
                            return item.updateAttributes({
                                isListed : 1
                            }, {transaction: t});
                        })
                    }).then(function(result){
                        res.json({message:"success"})
                    }).catch(function(err){
                        res.json(err);
                    })






                //end of else block 
                }
            //end of if item block  
            }
        }).catch(function(err){
            res.json(err);
        })
});

module.exports = router;

你试过了吗

return models.db.sequelize.transaction(function(...
当你有一系列的承诺时,你需要回报每一个承诺,否则执行将不需要等待。了解您在何处添加了console.log()以及正在记录的内容会很有帮助

另一件可能使代码更可读、更易于调试的事情是如何更新项。因为您有一个对项目的引用,所以可以这样更新

return item.updateAttributes({isListed: 1}, {transaction: t});
return models.Listing.create({
sellerID:req.decoded.user.username,
起始日期:req.body.startDate,
endDate:req.body.endDate,
startPrice:req.body.startDate,
reservePrice:req.body.reservePrice,
伊索尔德:0,
itemID:req.params.id
},{transaction:t})
.然后(函数(t){
return item.updateAttributes({
名单:1
},{transaction:t});

})
你试过做吗

return models.db.sequelize.transaction(function(...
当你有一系列的承诺时,你需要回报每一个承诺,否则执行将不需要等待。了解您在何处添加了console.log()以及正在记录的内容会很有帮助

另一件可能使代码更可读、更易于调试的事情是如何更新项。因为您有一个对项目的引用,所以可以这样更新

return item.updateAttributes({isListed: 1}, {transaction: t});
return models.Listing.create({
sellerID:req.decoded.user.username,
起始日期:req.body.startDate,
endDate:req.body.endDate,
startPrice:req.body.startDate,
reservePrice:req.body.reservePrice,
伊索尔德:0,
itemID:req.params.id
},{transaction:t})
.然后(函数(t){
return item.updateAttributes({
名单:1
},{transaction:t});

})
“努力获取要调用的事务方法”,那么到底发生了什么?完全没有执行或部分执行?有错误吗?根本没有执行-我在那里添加了一个console.log来尝试查看是否发生了任何事情,但是所有得到的都返回了一个空对象“{}”,正在努力获取要调用的事务方法,那么到底发生了什么呢?完全没有执行或部分执行?有错误吗?根本没有执行-我在那里添加了一个console.log,以尝试查看是否发生了任何事情,但所有返回的都是一个空对象“{}”我添加了您的第一个建议-我仍然只是收到{}作为响应,并且没有对列表或项目表进行任何更改。请尝试
返回models.sequelize.transaction(函数(…
我不知道您是如何初始化
模型的,但我猜您正在使用建议的样板文件(来自),在这种情况下,sequelize直接是模型的一个属性。我发现一种有用的技术是打开一个节点REPL并要求您的模型加入其中。然后您可以使用制表符完成来确定连接了哪些属性。如果您将sequelize的日志输出管道化到一个文件中,这样您就可以查看正在执行的SQL,这也会很有帮助。我还在回答的末尾添加了一些注释。请查看您是否正在覆盖事务对象,以及这是否导致它失败。我添加了您的第一个建议-我仍然只是收到{}作为响应,并且没有对列表或项目表进行任何更改。请尝试
返回模型。sequelize.transaction(函数(…
我不知道您是如何初始化
模型的,但我猜您正在使用建议的样板文件(来自),在这种情况下,sequelize直接是模型的一个属性。我发现一种有用的技术是打开一个节点REPL并要求您的模型加入其中。然后您可以使用制表符完成来确定连接了哪些属性。如果您将sequelize的日志输出管道化到一个文件中,这样您就可以查看正在执行的SQL,这也会很有帮助。我还在回答的末尾添加了一些注释。请查看您是否正在覆盖事务对象,以及这是否导致事务对象失败。