Необработанное отклонение SequelizeDatabaseError при передаче динамического запроса в предложении where - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь разложить пользовательский запрос get и поместить его в переменную с именем query.затем передайте запрос var в метод findAll sequelize, используя предложение where, похоже, что Sequelize думает, что я ищу запрос CALLED таблицы, когда в действительности я пытаюсь передать объект.Извините, если я не могу объяснить очень хорошо, но вот код и ошибка:

var info = [];
//link example: localhost:8081/filter/?descripiton=san+francisco&houseType=house&numOfBedroom=3&numOfBathroom=2&houseSize=500&price=1200
exports.filterListings = function(req) {
    //create an object literal which we will return, and has a nested object named filteredList inside.
    //filteredList contains an array named listings where we will put listings that match our filter inside
    let response = {
        filteredList: {listings: []},
    };

    //now we need to see how the user wants us to filter the listings
    const query = req.query;
    //do some logic where we decompose query

    if(query.descripiton != undefined) {
    //info = info + 'descripiton: ' + query.descripiton+', ';
    info.push('descripiton: ' + query.descripiton+', ');
    console.log(info);
    }
    if(query.houseType != undefined) {
    //info = info + 'houseType: ' + query.houseType+', ';
    info.push('houseType: ' + query.houseType+', ');
    //console.log(info);
    }
    if(query.numOfBedroom != undefined) {
    //info = info + 'numOfBedroom: ' + query.numOfBedroom+', ';
    info.push('numOfBedroom: ' + query.numOfBedroom+', ');
    }
    if(query.numOfBathroom != undefined) {
    //info = info + 'numOfBathroom: ' + query.numOfBathroom+', ';
    info.push('numOfBathroom: ' + query.numOfBathroom+', ');
    }
    if(query.houseSize != undefined) {
    //info = info + 'houseSize: ' + query.houseSize+', ';
    info.push('houseSize: ' + query.houseSize+', ');
    }
    if(query.price != undefined) {
    //info = info + 'price: ' + query.price;
    info.push('price: ' + query.price);
    }

и затем, когда я пытаюсь передать переменную информации

listingModel.findAll({
        //error because it wont recognize the variable search nor will it recognize info
        where: {info}
    }).then(listings => {
        // so we loop through listings and insert what we have found into the response (which we are going to return)
    for(var i = 0; i < listings.length; i++) {
        response.filteredList.listings.push(listings[i]);
    }; // loop where we insert data into response done

Iхочу найти все списки на основе динамического запроса, но я получаю сообщение об ошибке:

Unhandled rejection SequelizeDatabaseError: Unknown column 'Listing.info' in 'where clause'

Большое спасибо за потенциальную помощь!

1 Ответ

0 голосов
/ 07 мая 2019

Давайте попробуем отсортировать по вашим проблемам по очереди. Извините за каламбур: p

Вместо использования нескольких if для создания отфильтрованного списка. Используйте for ... in. Затем используйте этот массив объектов вместе с Sequelize.Op для создания запроса.

Пример:

const Op = require('sequelize').Op;

const whereClause = [];
const query = req.query;
for(const key in query) {
  if(query[key] !== '' && query[key] !== null) {
    //object will be pushed to the array like "houseType:big"
    whereClause.push({key:query[key]})
  }
}

//you now have the where clause
//use it in your query with Op.and

listingModel.findAll({
  where: {
    [Op.and]: whereClause,
  }
});

Подробнее о запросах с помощью Sequelize - Операторы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...