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: [
// найденные объекты
]
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть цикл который выводит данные из массива в виде элементов на страницу с помощью метода appendНо так как массив многомерный мне понадобилось...
При использовании media-запросов в CSS будет ли загружаться background для десктопа, если разрешение соответствует мобильному устройству?