typescript - Fel vid uppgradering av Azure Function EventHub-trigger till programmeringsmodell v4. Har detta att göra med den saknade inställningen "dataType": "binary"?
Jag försöker migrera min Azure-funktion från v3 till v4 programmeringsmodell. Om jag försöker trigga den omstrukturerade funktionen får jag följande fel:
[2023-10-24T08:05:30.375Z] Executed 'Functions.location-updates' (Failed, Id=caeb8080-79aa-4230-b7f7-541111ef99bb, Duration=65ms)
[2023-10-24T08:05:30.375Z] System.Private.CoreLib: Exception while executing function: Functions.location-updates. Microsoft.Azure.WebJobs.Host: Exception binding parameter 'eventHubTrigger1'. Microsoft.Azure.WebJobs.Host: Binding parameters to complex objects (such as 'Object') uses Json.NET serialization.
[2023-10-24T08:05:30.375Z] 1. Bind the parameter type as 'string' instead of 'Object' to get the raw values and avoid JSON deserialization, or
[2023-10-24T08:05:30.376Z] 2. Change the queue payload to be valid json. The JSON parser failed: Unexpected character encountered while parsing value: . Path '', line 0, position 0.
Med programmeringsmodellen v3 specificerade jag "dataType": "binary" i function.json-filen, men med v4 är detta inte möjligt i alternativen för app.eventHub(name, options). Jag tror att detta kan orsaka felet.
Tack för din hjälp!
Svar #1
Triggerkonfigurationer som metoder och AuthLevel, datatyp som tidigare specificerades i en function.json-fil har flyttats till själva koden i V4.
Det har skett några förändringar, och "dataType: binary" används inte längre.
Event Hub-triggern förväntar sig att meddelanden deserialiseras som JSON som standard. Om dina Event Hub-meddelanden inte är i JSON-format måste du hantera deserialiseringen själv.
För att göra detta bör du binda parametern som en sträng och sedan manuellt deserialisera meddelandet inuti din funktionskod.
module.exports = async function (context, eventHubMessages) {
for (const message of eventHubMessages) {
// For example, if the message is a binary format, you can decode it to a string
const decodedMessage = Buffer.from(message, 'base64').toString('utf8');
// Now you can work with the decoded message as a string
context.log(decodedMessage);
}
};
I v4, bind parametern som en sträng och hantera manuellt deserialisering av meddelanden om de inte är i JSON-format. För mer information, ta denna länk som referens.
