Фильтр поиска получить сообщение об ошибке req не определен - PullRequest
0 голосов
/ 12 апреля 2020

Я создал несколько раскрывающихся меню, чтобы пользователи могли фильтровать поиск по городам, спальням и ванным комнатам. Форма возвратит все данные, которые относятся к поиску пользователя. Функция поиска, функция BedroomSearch и bathroomSearch будут обрабатывать всю фильтрацию поиска. По какой-то странной причине я продолжаю получать сообщение об ошибке «ReferenceError: req не определено». Как мне заставить мой фильтр работать?

form.e js

<form action="/homes" method="GET" class="filter-form">

    <select name="search" id="form-city">
    <option value="" disabled selected>Search by City</option>
      <option value="New York">New York</option>
  <option value="CA">California</option>
  <option value="MI">Michigan</option>
  <option value="Hawaii">Hawaii</option>
</select>

<select name="bed">
    <option value="3 Beds">3 Beds</option>
  <option value="5 Beds">5 Beds</option>
  <option value="6 Beds">6 Beds</option>
  <option value="8 Beds">8 Beds</option>

</select>

<select name="bath">
    <option value="" disabled selected>Bathrooms</option>
      <option value="New York">New York</option>
  <option value=" 3.5 baths"> 3.5 baths</option>
  <option value="5 baths"> 5 baths</option>
  <option value="6 baths"> 6 baths</option>
</select>


              <input type="submit" value="SEARCH" class="site-btn fs-submit">
          </form>


house. js

router.get("/", function(req, res){
  //function to search by city
  search();

  //function to search by bedrooms
  bedroomSearch();

  //function to search by bathrooms
  bathroomSearch()
});

//search functions
function citySearch() {
  var noMatch = null;
    if(req.query.search) {
        const regex = new RegExp(escapeRegex(req.query.search), 'gi');
        // Get all homes from DB
        Home.find({city: regex}, function(err, allHomes){
           if(err){
               console.log(err);
           } else {
              if(allHomes.length < 1) {
                  noMatch = "No homes match that query, please try again.";
              }
              res.render("homes/index",{homes:allHomes, noMatch: noMatch});
           }
        });
    } else {
        // Get all homes from DB
        Home.find({}, function(err, allHomes){
           if(err){
               console.log(err);
           } else {
              res.render("homes/index",{homes:allHomes, noMatch: noMatch});
           }
        });
    }

}
// end of city search function

function bedroomSearch() {
  var noMatch = null;
    if(req.query.bed) {
        const regexBed = new RegExp(escapeRegex(req.query.bed), 'gi');
        // Get all homes from DB
        Home.find({bedrooms: regexBed}, function(err, allHomes){
           if(err){
               console.log(err);
           } else {
              if(allHomes.length < 1) {
                  noMatch = "No homes match that query, please try again.";
              }
              res.render("homes/index",{homes:allHomes, noMatch: noMatch});
           }
        });
    } else {
        // Get all homes from DB
        Home.find({}, function(err, allHomes){
           if(err){
               console.log(err);
           } else {
              res.render("homes/index",{homes:allHomes, noMatch: noMatch});
           }
        });
    }

}

//end of bed function

function bathroomSearch() {
  var noMatch = null;
    if(req.query.bath) {
        const regexBath = new RegExp(escapeRegex(req.query.bath), 'gi');
        // Get all homes from DB
        Home.find({bathrooms: regexBath}, function(err, allHomes){
           if(err){
               console.log(err);
           } else {
              if(allHomes.length < 1) {
                  noMatch = "No homes match that query, please try again.";
              }
              res.render("homes/index",{homes:allHomes, noMatch: noMatch});
           }
        });
    } else {
        // Get all homes from DB
        Home.find({}, function(err, allHomes){
           if(err){
               console.log(err);
           } else {
              res.render("homes/index",{homes:allHomes, noMatch: noMatch});
           }
        });
    }

}

//end of bathroom function


// For form 
function escapeRegex(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
};

1 Ответ

2 голосов
/ 12 апреля 2020

Вы не передаете переменные req или res другим функциям. Область действия параметров req и res связана только с функцией обратного вызова в router.get.

Вы можете просто передать параметры req и res вызываемым функциям. :

router.get("/", function(req, res){
  //function to search by city
  citySearch(req, res);

  //function to search by bedrooms
  bedroomSearch(req, res);

  //function to search by bathrooms
  bathroomSearch(req, res);
});

И получить эти переменные в каждой из функций, чтобы они могли использовать их:

function citySearch(req, res) {
  // Rest of code...
}

function bedroomSearch(req, res) {
  // Rest of code
}

function bathroomSearch(req, res) {
  // Rest of code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...