The logs are included in the transaction receipt (https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethgettransactionreceipt) but you can retrieve the transaction receipt only once it's mined. Depending on many factors (network congestion, gas price), a transaction can take a few seconds or a few hours to be mined.
That's why I wouldn't recommend to use synchronous HTTP call to do that. A good API is supposed to have a timeout and in your case you can't be absolutely sure that your transaction will be mined on time.
However, if you still want to do this, you can pull the transaction receipt (https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethgettransactionreceipt) every second until you get it:
waitForReceipt(hash, 1000).then(function (transactionReceipt) {
console.log(transactionReceipt)
});
function waitForReceipt(hash, millisecondsInterval) {
var retryCount = 0;
var retryCountLimit = 100;
var promise = new Promise((resolve, reject) => {
var timer = setInterval(function () {
web3.eth.getTransactionReceipt(hash, function(err, rec) {
if(err) {
console.log(err)
clearInterval(interval);
reject(err)
}
if(rec != null) {
clearInterval(timer);
resolve(rec);
return;
}
retryCount++;
if (retryCount >= retryCountLimit) {
clearInterval(timer);
reject("retry count exceeded");
}
});
}, millisecondsInterval);
});
return promise;
}
I would recommend rather to use WebSocket to handle the asynchronous nature of the blockchain between a client and a server.