If I remove the else part from my "/search" route the code works perfectly fine but I also have to handle requests the don't match with the object provided
Blockquote I keep getting this error Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:518:11) at ServerResponse.header (C:\Users\A\Documents\Web development\yelp kamp\dummy\node_modules\express\lib\response.js:771:10) at ServerResponse.send (C:\Users\A\Documents\Web development\yelp kamp\dummy\node_modules\express\lib\response.js:170:12) at ServerResponse.json (C:\Users\A\Documents\Web development\yelp kamp\dummy\node_modules\express\lib\response.js:267:15) at C:\Users\A\Documents\Web development\yelp kamp\dummy\app.js:47:17 at Array.forEach () at C:\Users\A\Documents\Web development\yelp kamp\dummy\app.js:39:12 at Layer.handle [as handle_request] (C:\Users\A\Documents\Web development\yelp kamp\dummy\node_modules\express\lib\router\layer.js:95:5) at next (C:\Users\A\Documents\Web development\yelp kamp\dummy\node_modules\express\lib\router\route.js:137:13) at Route.dispatch (C:\Users\A\Documents\Web development\yelp kamp\dummy\node_modules\express\lib\router\route.js:112:3)
node server file
app.use(express.json({type: ['application/json', 'text/plain']}))
app.get("/",function(req,res){
res.render('index');
})
var sender = [
{
type: 'h',
name:'soumya'
},
{
type: 'i',
name:'soumyaraj'
},
{
type: 'j',
name:'soumyaraj'
},
{
type: 'k',
name:'soumyaraj'
}
]
app.post("/search",function(req,res){
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'POST');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-
With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
var s=[];
sender.forEach(e=>{
if(e.type == req.body.search){
console.log(req.body);
s.push(e);
res.json(s);
}
else{
console.log(req.body);
res.json([
{
type:"notfound"
,name:"not found"
}
])
}
})
})```
<body>
<div id="myOverlay" class="overlay">
<span class="closebtn" onclick="closeSearch()" title="Close Overlay">×</span>
<div class="overlay-content">
<form action="/search" method="GET" class="frm">
<input id="inp" type="text" placeholder="Search.." name="search">
</form>
<div class="gap"></div>
<div class="result">
</div>
</div>
</div>
<h2>Fullscreen Search</h2>
<p>Click on the button to open the search box.</p>
<button class="openBtn" onclick="openSearch()">Open Search Box</button>
<script>
var show = document.getElementsByClassName("result");
function openSearch() {
document.getElementById("myOverlay").style.display = "block";
}
function closeSearch() {
document.getElementById("myOverlay").style.display = "none";
}
document.querySelector(".frm").addEventListener("submit", function(e) {
e.preventDefault()
go(e.target[0].value);
return false;
});
document.getElementById("inp").addEventListener("input", function(e) {
// if(e.target.value.length() === 0){
// show[0].textContent = "";
// }
go(e.target.value);
});
function go(search) {
fetch("/search", {
method: 'POST',
mode: "cors",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
search: search,
status: "find"
})
}).then(function(res) {
return res.json();
}).then(function(data) {
show[0].style.display = "block";
show[0].textContent = "";
data.forEach(e => {
show[0].innerHTML += e.type + "<br>";
show[0].innerHTML += e.name + "<br>";
});
})
}
</script>
</body>