如何避免默认情况下将 FindAll 条件设置为 "undefined"



我创建了一个网络应用程序来显示数据库中的公司。我插入了两个过滤器来改进搜索:类型和国家。

我的问题是,当过滤器没有设置一个查询:

type=";未定义的"&country=";未定义的";已发送。

同样,如果只设置一个过滤器,则另一个过滤器未定义,反之亦然。发送正确查询的唯一方法是设置所有筛选器以给它们一个值。

如何确保不考虑未设置的筛选器?

我的前端:

const handleFetchWithSearchParameters = () => {
TutorialDataService.findByParameters(searchParameters)             
.then(response => { setTutorials(response.data); 
console.log(response.data);             
})             
.catch(e => { console.log(e);             
});    }
return (
<Form.Control as="select"type="text"
required
value={searchParameters.searchCountry}
onChange={onChangeSearchCountry}
name="country">
<option>Select Country</option>
<option>Nigeria</option>
<option>Ghana</option>
<option>Kenya</option>
<option>Senegal</option>
</Form.Control>
<Form.Control as="select"type="text"id="type"
requiredvalue={searchParameters.searchType}
onChange={onChangeSearchType}
name="type">
<option>Select Type</option>    
<option>Agricultural</option>    
<option>Manufacturing</option>    
<option>Industrial</option>        
<option>Livestock</option>        
<option>Service Industry</option>
</Form.Control>
<button type="button" onClick={handleFetchWithSearchParameters}>    
Search                      
</button>

Service.js:

const findByParameters = searchParameters
=> {const { searchType, searchCountry} = searchParameters;
return http.get(`/tutorials?type=${searchType}&country=${searchCountry}`); }; 

Controller.js:

exports.findAll = (req, res) => { 
const { type, country } = req.query;
let condition = (type || country) ?   
{type: type,
country: country,  
} : null; 
Tutorial.findAll({
where: condition,
order: [  ['createdAt', 'DESC']] })    
.then(data => {
res.send(data);    
})    .
catch(err=> {
res.status(500).send({message:err.message || "Some error occurred while retrieving tutorials."      
});    });};

服务中。js

const findByParameters = searchParameters  => {
const {
searchType,
searchCountry
} = searchParameters;
const params = new URLSearchParams();
if (searchType)
params.set('type', searchType);
if (searchCountry)
params.set('country', searchCountry);
return http.get(`/tutorials?${params.toString()}`);
}

我不确定你在使用哪个数据库,但我认为你可以切换这个:

let condition = (type || country) ?   
{type: type,
country: country,  
} : null; 

有了这个:

const condition = {};
if (type)
condition.type = type;
if (country)
condition.country = country;

在controller.js.中

最新更新