I have deployed two services on Container Apps, both setup using Fastify, both with Dapr enabled.
I cannot seem to get the POST requests between the two services working. If Service A make a POST request with a request body to Service B, the request.body turns out to be an empty string in Service B.
However, if I invoke the POST route of Service B directly on Postman with a JSON request body. It works fine.
I cannot figure the reason why.
My dapr version is:
CLI version: 1.13.0
Runtime version: 1.13.5
And advice is appreciated !
Expected Behavior
Services can invoke POST requests between them and can pass the request body from the caller service to the receiver service.
Actual Behavior
The Expense Service
tries to call the Notification Service
. It works fine locally. But after deployed to Azure Container Apps, the request body is an empty string.
// expense service
import Fastify from "fastify";
import fetch from "node-fetch";
const fastify = Fastify({
logger: true,
});
const DAPR_HOST = process.env.DAPR_HOST || "http://localhost";
const DAPR_HTTP_PORT = process.env.DAPR_HTTP_PORT || "3500";
fastify.post("/expense/new", async function handler(request, reply) {
try {
const { body } = request;
const resp = await fetch(`${DAPR_HOST}:${DAPR_HTTP_PORT}/test`, {
method: "POST",
headers: {
"dapr-app-id": "notification-service",
"content-type": "application/json",
},
body: JSON.stringify(body),
});
const data = await resp.json();
reply.send(data);
} catch (err: any) {
console.error(err);
reply.code(500).send({ error: err.message });
}
});
try {
await fastify.listen({ host: "0.0.0.0", port: 3000 });
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
// notification service
import Fastify from "fastify";
const fastify = Fastify({
logger: true,
});
fastify.addContentTypeParser(
"application/json",
{ parseAs: "string" },
function (req, body: any, done) {
try {
// console.log("RAW: ", body);
console.log("wtf");
done(null, body);
} catch (err: any) {
err.statusCode = 400;
done(err, undefined);
}
}
);
fastify.post("/test", async function handler(request, reply) {
console.log(request.body); // <-- this is an empty string on Azure Container Apps, but works fine locally
reply.send({ body: request.body });
});
try {
await fastify.listen({ host: "0.0.0.0", port: 3001 });
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
I tried using the dapr CDK clients and server but they resulted in the same problem.
Yick Kiu Liam Leung is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.