SequelizeJS使用If条件和查询参数



我有一个应用程序路由,我希望能够使用查询参数为我的where子句,如果有查询存在。我最初的方法是在get中使用if/else子句,并根据查询参数是否存在返回两个不同的查询,但是我在then(function...处得到SyntaxError: Unexpected token .错误,这告诉我这不是正确的方法。我如何通过Sequelize实现某些目标?

/*====   /  ====*/
appRoutes.route('/') 
    .get(function(req, res){
        console.log(req.query.dataDateStart);
        console.log(req.query.dataDateEnd);
        if(req.query.dataDateStart && req.query.dataDateEnd){
        return models.Comment.findAll({
            where: {
                dataDateStart: {
                    $gte: dateFormatting(req.body.dataDateStart)
                },
                dataDateEnd: {
                    $lte: dateFormatting(req.body.dataDateEnd)
                }
            },
            order: 'commentDate DESC',
            include: [{
                model: models.User,
                where: { organizationId: req.user.organizationId },
                attributes: ['organizationId', 'userId']
            }],
            limit: 10
        })
        } else {
        return models.Comment.findAll({
            order: 'commentDate DESC',
            include: [{
                model: models.User,
                where: { organizationId: req.user.organizationId },
                attributes: ['organizationId', 'userId']
            }],
            limit: 10
        })
        }
        .then(function(comment){
            function feedLength(count){
                if (count >= 10){
                    return 2;
                } else {
                    return null;
                }
            };
            res.render('pages/app/activity-feed.hbs',{
                comment: comment,
                user: req.user,
                secondPage: feedLength(comment.length)
            });
        });
    })
    .post(function(req, res){
        function dateFormatting(date){
            var newDate = new Date(date); 
            return moment.utc(newDate).format();
        }
        console.log("This is a date test" + dateFormatting(req.body.dataDateStart));
        //Testing if the query will come through correctly.
        models.Comment.findAll({
            order: 'commentDate DESC',
            where: {
                dataDateStart: {
                    $gte: dateFormatting(req.body.dataDateStart)
                },
                dataDateEnd: {
                    $lte: dateFormatting(req.body.dataDateEnd)
                }
            },
            include: [{
                model: models.User,
                where: { 
                    organizationId: req.user.organizationId,
                },
                attributes: ['organizationId', 'userId']
            }],
            limit: 10
        }).then(function(filterValues) { 
            var dataDateStart = encodeURIComponent(dateFormatting(req.body.dataDateStart));
            var dataDateEnd = encodeURIComponent(dateFormatting(req.body.dataDateEnd));
            res.redirect('/app?' + dataDateStart + '&' + dataDateEnd);
        }).catch(function(error){
            res.send(error);
        })
    });

语法错误。then函数只能在thenable对象上调用。在上面的代码片段中,.then不应用于任何东西。相反,它是在if-else语句之后调用的。

if(...) {
  ...
}
else {
  ...
}
// .then() is not called on any object --> syntax error 'unexpected "."'
.then()

如果你只想配置where参数,你可以根据url查询定义where对象。appRoutes.route("/")

.get(function(req, res){
    console.log(req.query.dataDateStart);
    console.log(req.query.dataDateEnd);
    var whereObject = {};
    // CHeck for queries in url
    if(req.query.dataDateStart && req.query.dataDateEnd){
        whereObject = {
            dataDateStart: {
                $gte: dateFormatting(req.body.dataDateStart)
            },
            dataDateEnd: {
                $lte: dateFormatting(req.body.dataDateEnd)
            }
        };
    }
    models.Comment.findAll({
        where: whereObject,
        order: 'commentDate DESC',
        include: [{
            model: models.User,
            where: { organizationId: req.user.organizationId },
            attributes: ['organizationId', 'userId']
        }],
        limit: 10
    })
    .then(function(comment){
        function feedLength(count){
            if (count >= 10){
                return 2;
            } else {
                return null;
            }
        };
        res.render('pages/app/activity-feed.hbs',{
            comment: comment,
            user: req.user,
            secondPage: feedLength(comment.length)
        });
    });
})
.post(function(req, res){
    function dateFormatting(date){
        var newDate = new Date(date);
        return moment.utc(newDate).format();
    }
    console.log("This is a date test" + dateFormatting(req.body.dataDateStart));
    //Testing if the query will come through correctly.
    models.Comment.findAll({
        order: 'commentDate DESC',
        where: {
            dataDateStart: {
                $gte: dateFormatting(req.body.dataDateStart)
            },
            dataDateEnd: {
                $lte: dateFormatting(req.body.dataDateEnd)
            }
        },
        include: [{
            model: models.User,
            where: {
                organizationId: req.user.organizationId,
            },
            attributes: ['organizationId', 'userId']
        }],
        limit: 10
    }).then(function(filterValues) {
        var dataDateStart = encodeURIComponent(dateFormatting(req.body.dataDateStart));
        var dataDateEnd = encodeURIComponent(dateFormatting(req.body.dataDateEnd));
        res.redirect('/app?' + dataDateStart + '&' + dataDateEnd);
    }).catch(function(error){
        res.send(error);
    })
});

最新更新