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