Unable to catch error in piped streams | Uncaught TypeError [ERR_INVALID_ARG_TYPE]
Personne n'a encore pris cette issue.
- Langage dominant
- JavaScript
- Étoiles
- 122k
- Forks
- 37.4k
- Merge moyen
- 4 j 2 h
- PR mergées (30 j)
- 283
Description
Version
v14.18.1
Platform
macOS Big Sur
Subsystem
No response
What steps will reproduce the bug?
When we pipe multiple streams and the data coming from the first stream is an array, then it is expected to have an error. But I am unable to catch this error in this case and it is throwing the below error.
**internal/streams/writable.js:285
throw new ERR_INVALID_ARG_TYPE(
^
TypeError [ERR_INVALID_ARG_TYPE]: The "chunk" argument must be of type string or an instance of Buffer or Uint8Array. Received an instance of Array
at new NodeError (internal/errors.js:322:7)
at WriteStream.Writable.write (internal/streams/writable.js:285:13)
at Stream.ondata (internal/streams/legacy.js:20:31)
at Stream.emit (events.js:400:28)
at drain (/Users/mayankkatare/Trainings/Node assignments/node_modules/through/index.js:36:16)
at Stream.stream.queue.stream.push (/Users/mayankkatare/Trainings/Node assignments/node_modules/through/index.js:45:5)
at Parser.parser.onValue (/Users/mayankkatare/Trainings/Node assignments/node_modules/JSONStream/index.js:118:16)
at Parser.proto.emit (/Users/mayankkatare/Trainings/Node assignments/node_modules/jsonparse/jsonparse.js:337:8)
at Parser.proto.pop (/Users/mayankkatare/Trainings/Node assignments/node_modules/jsonparse/jsonparse.js:332:8)
at Parser.proto.onToken (/Users/mayankkatare/Trainings/Node assignments/node_modules/jsonparse/jsonparse.js:402:12) {
code: 'ERR_INVALID_ARG_TYPE'
}**
------Repro script--------
const request = require('request');
const JSONStream = require('JSONStream')
const fs = require('fs')
let Url = 'http://localhost:5000/' // This url returns a response
request(Url).on('response', respHandler)
function respHandler(res) {
let jsonStream = JSONStream.parse(['data']) // Assuming response is {data:['Home page', 'Jackson']}
var file = fs.createWriteStream('someNewFile.txt')
try {
// Trying to catch error on each stream initially
res.on('error', err => console.log(err));
jsonStream.on('error', err => console.log(err));
file.on('error', err => console.log(err));
// Trying to catch error during piping
res.pipe(jsonStream).on('error', (err) => {
console.log(err)
if(err) {
console.log(err);
}
}).pipe(file).on('error', (err) => {
console.log(err)
if(err) {
console.log(err);
}
})
} catch (error) {
if(error)
console.log(error);
}
}
How often does it reproduce? Is there a required condition?
Everytime
What is the expected behavior?
It should throw an error but we should be able to handle this error so that our app should not crash. We should be able to catch the error in error event handler. This was the behaviour in 12.15.0 and it seems to have changed in 14.18.1
What do you see instead?
Uncaught TypeError [ERR_INVALID_ARG_TYPE]: The "chunk" argument must be of type string or an instance of Buffer or Uint8Array. Received an instance of Array
Additional information
No response
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par la reproduction fournie et suivez la pile depuis Stream.ondata jusqu’à internal/streams/writable.js. Exécutez-la avec v14.18.1 et comparez le comportement observé à celui de v12.15.0, en vous concentrant sur la manière dont les erreurs des streams interconnectés parviennent aux gestionnaires d’erreurs enregistrés. C’est terminé lorsque le chunk de tableau invalide est signalé par un gestionnaire d’erreurs sans provoquer le crash non intercepté du processus.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript, node.js
- Domaine
- backend
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100