Despite there being a ton of stackoverflow questions and articles online about this topic, none seem to apply to my particular application.
router.get('/getFile', (req, res) => {
console.log("Calling getFile for file " + req.query.serialNumber + ".")
var serialNumber = req.query.serialNumber;
let request = new sql.Request(conn);
request.query('SELECT FileName + \'.\' + FileExtension AS \'File\', FileType, ContentType, SerialNumber, Chart ' +
'FROM dbo.ChangeFiles ' +
'WHERE SerialNumber = ' + serialNumber)
.then(function (recordset) {
log("Successfully retrieved file " + recordset[0].SerialNumber + " from database.")
res.writeHead(200, {
'Content-Type': recordset[0].ContentType,
'Content-disposition': 'attachment;filename=' + recordset[0].File
});
res.send(Buffer(recordset[0].Chart));
}).catch(function (err) {
log(err);
res.send("Issue querying database!");
});
});
I can't seem to figure out how to properly change the headers so that it is done before res.send hits. It is most likely due to the asynchronous nature of javascript, something I still have yet to grasp properly, but how can I ensure that res.writeHead is called before res.send?
Thank you so much in advance for looking at this.