-1
*

**> const PORT=8000

const express = require('express')
const {v4:uuidv4}=require('uuid')
const bcrypt =require('bcrypt')
const jwt =require('jsonwebtoken')
const cors=require('cors')
const {MongoClient}=require('mongodb')
const { raw } = require('express')
const uri='mongodb+srv://Adi:Adi@cluster0.djy2w.mongodb.net/Cluster0?retryWrites=true&w=majority'


const app=express()

app.use(cors())
app.use(express.json())

app.get('/',(req,res)=>{
    res.json('hello')
})





app.get('/user', async (req,res)=>{
    const client= new MongoClient(uri)
    const userId=req.query.userId
    console.log('userid',userId)


try{
    await client.connect()
    const database=client.db('app-data')
    const users=database.collection('users')
    const query = {user_id:userId}
    const user= await users.findOne(query)
    console.log('usersss',user)
   res.send(user)

}catch(err){
    console.log(err)

}

finally{
    await client.close()
}
})


app.post('/signup',async (req,res)=>{

    const client= new MongoClient(uri)
    const {email,password}=req.body

    const generateeduderId=uuidv4();
    const hashedpassword= await bcrypt.hash(password,10)

    try{
        await client.connect()
        const database=client.db('app-data')
        const users= database.collection('users')

      const existingUser= await users.findOne({email})

      if(existingUser){
          return res.status(409).send('User already exists... Please Login')
                    }


      const sanitizedEmail=email.toLowerCase()
      const data={
          user_id:generateeduderId,
          email:sanitizedEmail,
          hashed_password:hashedpassword
                }


      const inserteduser = await users.insertOne(data)
      const token=jwt.sign(inserteduser,sanitizedEmail,{
          expiresIn:60*24,
      })

        res.status(201).json({token,userId:generateeduderId })
    }
    
    catch(err){
        console.log(err)

    }


})






app.post('/login',async(req,res)=>{
    const client= new MongoClient(uri)
    const {email,password}=req.body
    
    try{
        await client.connect()
        const database=client.db('app-data')
       const users= database.collection('users')
         const user=await users.findOne({email})


         const correctpassword= await bcrypt.compare(password,user.hashed_password)

         if(user && correctpassword){ 
            const token=jwt.sign(user,email,{
                expiresIn:60*24
            })
            res.status(201).json({token,userId:user.user_id})
         }
          
         res.status(400).send('Invalid Credentials')
    }
    catch(err){
        console.log(err)
    }


})





app.get('/users', async(req,res)=>{
   const client= new MongoClient(uri)

   try{
       await client.connect()
        const database=client.db('app-data')
       const users= database.collection('users')

      const returnedUsers=await users.find().toArray()
      res.send(returnedUsers)


   }
   finally{
       await client.close()
   }
})










app.put('/user', async(req,res)=>{
    const client= new MongoClient(uri)
    const formData=req.body.formData

    console.log(formData)

  try{
 
    await client.connect()
    const database=client.db('app-data')
    
    const users=database.collection('users')
    const query= {user_id:formData.user_id}


    const updateDocument={
        $set:{
            first_name:formData.first_name,
            dob_day:formData.dob_day,
            dob_month:formData.dob_month,
            dob_year:formData.dob_year,
            show_gender:formData.show_gender,
            gender_identity:formData.gender_identity,
            gender_interest:formData.gender_interest,
            url:formData.url,
            about:formData.about,
            matches:formData.matches

        },
    }

   const inserteduser= await users.updateOne(query,updateDocument)
   res.send(inserteduser)
  }
  finally{
      await client.close()
  }

})



app.listen(PORT,()=>{
    console.log(`server running on port ${PORT}`)
})




***

    error
    server running on port 8000
    Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at new NodeError (node:internal/errors:371:5)
    at ServerResponse.setHeader (node:_http_outgoing:576:11)
        at ServerResponse.header (C:\Users\aadar\Desktop\chat\seayo\server\node_modules\express\lib\response.js:776:10)
       at ServerResponse.send
(C:\Users\aadar\Desktop\chat\seayo\server\node_modules\express\lib\response.js:170:12)
       at C:\Users\aadar\Desktop\chat\seayo\server\index.js:120:26 {
     code: 'ERR_HTTP_HEADERS_SENT'
    }

  • Please give a [mre] with consistent formatting. But usually the error means you tried to respond twice to the same request, check the logical flow. – jonrsharpe Apr 02 '22 at 17:09
  • Where is line 120? – jabaa Apr 02 '22 at 17:10
  • You are returning the response twice. "res.status" is being called twice in "/users" get api – Akshay Raut Apr 02 '22 at 17:32
  • Please clarify your specific problem or provide additional details to highlight exactly what you need. As it's currently written, it's hard to tell exactly what you're asking. – Community Apr 03 '22 at 04:22

1 Answers1

0

You are returning the response twice. "res.status" is being called twice in "/users" get api.

As the response is already sent with the headers, it throws an error that you are not allowed to set headers twice.