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.
 
    