# node:string_decoder

O módulo `node:string_decoder` decodifica objetos `Buffer` em strings, como descreve a [documentação do string\_decoder do Node.js](https://nodejs.org/api/string_decoder.html). Use-o quando dados binários chegam em partes, como o corpo de uma requisição ou de uma resposta enviado em chunks, e um caractere multibyte pode ficar dividido entre duas partes. No Azion Runtime, o build aceita `import string_decoder from "node:string_decoder"`, e `StringDecoder` retorna os mesmos valores em uma function com deploy feito e com `azion dev`.

Um `StringDecoder` criado com `utf8` guarda um caractere incompleto entre as chamadas de `write()`. Ao receber os bytes `0xe2 0x82`, ele retorna uma string vazia; ao receber o byte seguinte, `0xac`, ele retorna `€`; e `end()` retorna então uma string vazia. Em um decoder criado com `base64`, `write()` de `ab` seguido de `end()` de `c` retorna `YWJj` no conjunto das duas chamadas. `Buffer` é um global, por isso uma function pode chamar `Buffer.from()` sem importar `node:buffer`.

---

## Exemplo

A function abaixo decodifica os dois bytes do caractere `¢`, registra o resultado em log e o retorna no corpo da resposta:

```javascript
/**
 * An example of using the Node.js StringDecoder API in an Azion Function.
 * @example
 * // Build and run locally with the Azion CLI:
 * azion build
 * azion dev
 */
import string_decoder from "node:string_decoder";

/**
 * An example of using the Node.js StringDecoder API in an Azion Function.
 * @param {*} event
 * @returns {Promise<Response>}
 */
const main = async (event) => {
  const decoder = new string_decoder.StringDecoder("utf8");
  const buffer = Buffer.from([0xc2, 0xa2]);
  const decoded = decoder.write(buffer);
  console.log(decoded);
  // ¢

  return new Response(decoded, { status: 200 });
};

export default main;
```

A function registra `¢` em log e responde com o status `200` e este corpo:

```text
¢
```

---

## Recursos relacionados

- [APIs do Node.js](/pt-br/documentacao/devtools/runtime/node.md): Todos os módulos do Node.js que o Azion Runtime resolve e como cada um se comporta.
- [node:buffer](/pt-br/documentacao/devtools/runtime/node/buffer.md): A classe Buffer, cujos objetos um StringDecoder lê.
- [Use APIs do Node.js com polyfills](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/functions-e-runtime/use-polyfills.md): Como o build resolve APIs do Node.js por meio de polyfills, mostrado em um projeto JavaScript.
- [Handlers](/pt-br/documentacao/devtools/runtime/api-reference/handlers.md): O formato de handler recomendado e o aviso que `azion build` imprime para o formato `export default main` que este exemplo usa.
