SequelizeJS使用If条件和查询参数

时间:2016-06-28 01:23:34

标签: express sequelize.js

我有一个应用程序路由,如果存在查询,我希望能够在where子句中使用查询参数。我最初的方法是在get中使用if / else子句并返回两个不同的查询,具体取决于查询参数是否存在,但我的SyntaxError: Unexpected token .出现then(function...错误,这告诉我这不是正确的方法。我如何用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);
        })
    });

1 个答案:

答案 0 :(得分:3)

这是语法错误。 then函数只能在一个soable对象上调用。在上面剪切的代码中,.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);
    })
});