首页 > 解决方案 > 我无法使用 sequelize 运行具有多个搜索参数的简单搜索

问题描述

我一直在尝试进行简单的搜索,但搜索参数不止一个,但无法真正超越它。我正在使用 sequelize 4.X 和 NodeJs。

好吧,我尝试通过接收这些搜索参数来req.params接收它们,然后我进行对象破坏(通常只使用一个参数)。我也尝试通过 req.body 发送搜索参数,但在获取它们并将它们传递给sequelize一个无效值错误之后

//controller
static async getParticulars(req, res) {
        try {
            const one = await termService.getOneComplex(req.body.id,req.body.term,req.body.studentId,req.body.course);
            if (!one) {
                util.setError(400, "Term can't be found");
                return util.send(res);
            } else {
                util.setSuccess("Term found", 200, one);
                return util.send(res);
            }
        } catch (error) {
            util.setError(400, error.message);
            return util.send(res);
        }
    }

//service
static async getOneComplex(classId_n,term_n,studentId_n,course_n){
        try {
            const foundTerm = await database.Term.findAll({
                where :{
                    [op.and] : [
                        {classId:classId_n},
                        {studentId:studentId_n},
                        {term:term_n},
                        {course:course_n}
                    ]
                }
            });
            if(Object.values(foundTerm).length >=1){
                return foundTerm;
            }else{
                return null;
            }
        } catch (error) {
            throw error;
        }
    }

期望:返回一个具有状态、消息、数据(带有实际数据)属性的对象。

//Actual:

{
    "status": "Error",
    "message": "Invalid value { classId: undefined }"
}

标签: node.jssequelize.js

解决方案


您不需要在这里使用运算符。只需在 where 子句中使用简单的哈希。

 const foundTerm = await database.Term.findAll({
                where :{
                        classId:classId_n
                        studentId:studentId_n
                        term:term_n
                        course:course_n
                       }   
            });

此外,根据您的错误。您正在发送未定义作为 classId 的值。所以记录那个值并检查它为什么是未定义的。


推荐阅读