app.post('/students/search', (req,res) => {
fs.readFile('./db/students.json', 'utf8', (err, data) => {
if (err) throw err;
let studentsArr = JSON.parse(data);
let reqName = req.query.name;
console.log(reqName);
let result;
studentsArr.filter(el =>{
let lowerCaseName = el.name.toLowerCase();
result = lowerCaseName.match(reqName);
if(result){
res.send(el);
}
});
});
});
Столкнулся с одной проблемой, отправляю запрос на сервер, чтоб вывел мне все найденных студентов по имени, но выводит вот такую ошибку:
Error: Can't set headers after they are sent.
Ошибка кроется здесь:
studentsArr.filter(el =>{
let lowerCaseName = el.name.toLowerCase();
result = lowerCaseName.match(reqName);
if (result) {
res.send(el); // вот здесь
}
});
Коллбэк, переданный в функцию filter, будет вызван для каждого элемента массива, а значит, если более одного объекта удовлетворят вашим условиям, то res.send будет вызван несколько раз (и вылетит ошибка, которая вылетела у вас, потому что отправить ответ можно только раз).
Попробуйте вынести res.send из скоупа функции filter:
let studentsAfterFilterList = studentsArr.filter(el =>{
let lowerCaseName = el.name.toLowerCase();
return lowerCaseName.match(reqName);
});
res.send({ result: studentsAfterFilterList }
Тогда клиент, сделавший запрос, получит такой ответ:
{
result: [
// найденные объекты
]
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости