NodeJS: How would I render two pages?

185 Views Asked by At

So I am making a file upload website that when file is uploaded, it renders an uploading page that says it's uploading the file but when trying to render the success page, it won't do it since a page has already been rendered. How would I make it render the success page?

Deps.: Express, Express-FileUpload, EJS (for view engine)

Code:

const express = require('express')
const upload = require('express-fileupload')
const crypto = require('crypto')

uploadDisabledM = {
    'message': 'Uploading has been disabled for new users.', // This was for testing at the start
    'code': 'UPL_DISABLED'
}
noFilesProvidedM = {
    'message': 'No files were provided.',
    'code': 'NO_FILE_PROV'
}

const app = express()
const http = require('http').Server(app).listen(80)
app.use(express.static('public'))
app.use(upload())
app.set('view engine', 'ejs')

app.get('/', (res, req) => {
    return req.render('index')
})

app.get('/upload', (res, req) => {
    req.redirect('/')
})

app.post('/upload', (res, req) => {
    let file
    let ID
    let uploadPath
  
    if (!res.files || Object.keys(res.files).length === 0) {
      return req.status(400).render('error', {
          error: noFilesProvidedM.message,
          code: noFilesProvidedM.code
        })
    }

    file = res.files.sampleFile
    ID = crypto.randomBytes(5).toString('hex')
    uploadPath = `${__dirname}/uploads/${ID}-${file.name}`
    endingFileName = `${ID}-${file.name}`

    req.render('loading')
    
    file.mv(uploadPath, (err) => {
        if(err){
            res.status(500).render('error', {
                error: err.message,
                code: 500
            })
        }
    })

    return req.render('success', { filename: endingFileName })
})

Error:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
0

There are 0 best solutions below