Estoy enfrentando el mismo problema que se menciona aquí :
Al intentar usar stream y consultar una tabla sin mencionar el schema .
Algo así como select * from table en lugar de select * from schema_name.table . Recibo el siguiente error: mssql uncaughtException RequestError: Invalid object name
Pude registrar el error mientras escuchaba readStream.on('error') pero aún arroja una excepción no uncaughtException .
Versiones de software
"mssql": "^7.2.1", "nodejs": "12.15.0"Comportamiento esperado:
Debería poder capturar la excepción no detectada
Comportamiento real:
INFO: waaaaaa1 uncaughtException RequestError: Invalid object name 'employee'. at handleError (.../node_modules/mssql/lib/tedious/request.js:388:15) at Connection.emit (events.js:223:5) at Connection.emit (.../node_modules/tedious/lib/connection.js:1071:18) at Parser. (.../node_modules/tedious/lib/connection.js:1176:12) at Parser.emit (events.js:223:5) at Readable. (.../node_modules/tedious/lib/token/token-stream-parser.js:27:14)Configuración:
import mssql from 'mssql'; try { mssql.connect({ server, port: Number.parseInt(port), database, user, password, options: { encrypt: true, // for azure trustServerCertificate: trustServerCertificate ? true : false // change to true for local dev / self-signed certs } }) .then(async client => { const readStream = client.request(); readStream.stream = true; const passThroughStream = new stream.PassThrough(); const writeStream = fs.createWriteStream(path.join(__dirname, './writeMe.json')); readStream.on('error', () => log.info('waaaaaa1')); passThroughStream.on('error', () => log.info('waaaaaa2')); writeStream.on('error', () => log.info('waaaaaa3')); readStream.pipe(passThroughStream).pipe(writeStream); readStream.query(query); }) // the promise error handler .catch(() => { log.info('waaaaaa4'); }); // the main sql error handler: mssql.on('error', error => { log.error('SQL error1', error); }); // the main sql error handler: client.on('error', error => { log.error('SQL error2', error); }); } catch (err) { log.info('catchhhh meee', err); } finally { if(client){ client.close(); } }Finalmente resolvió el problema usando const readableStream = request.toReadableStream();
Código completo:
const request = client.request(); const readableStream = request.toReadableStream(); const writeStream = fs.createWriteStream(path.join(__dirname, './writeMe.json')); const passThroughStream = new stream.PassThrough(); readableStream.on('end', () => passThroughStream.end()); readableStream.on('error', (e) => log.info('waaaaaa1')); readableStream.pipe(passThroughStream).pipe(writeStream); request.query(query);Intente agregar un controlador de captura para connect y, lo que es más importante, para el objeto mssql como se menciona en los documentos
mssql.connect({ // ... }) .then(() => { return readStream.query(query); }) // the promise error handler .catch(() => { }) // the main sql error handler: mssql.on('error', error => { console.error('SQL error') })