이 주제에 관해 온라인상의 stackoverflow 관련 질문과 기사가 많이 있지만 아무 것도 내 특정 응용 프로그램에 적용되지 않는 것 같습니다.node.js/express : 보낸 후 헤더를 설정할 수 없습니다.
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!");
});
});
나는 그것이 res.send 히트하기 전에 수행되도록 제대로 헤더를 변경하는 방법을 알아낼 수 없습니다. 그것은 자바 스크립트의 비동기 성질에 기인 할 가능성이 높습니다. 아직 제대로 이해하지 못했지만, res.endHead가 res.send 전에 호출되도록하려면 어떻게해야합니까?
고맙습니다. 미리 살펴 주셔서 감사합니다.
가능한 복제 [어떻게 express.js 자산에 대한 응답 헤더를 설정할 수 있습니다 (https://stackoverflow.com/questions/23751914/how-can-i-set-response-header-on-express -js-assets) – Fals
res.send 대신 res.end를 사용합니까? –
은 res.status() 및 res.send()와 함께 res.setHeader()를 사용합니다. – zubair1024