Descripción general: envío de una solicitud a la función azul de node.js. dentro de él, hay un módulo Newman para ejecutar una solicitud de recolección. Newman devuelve el emisor de eventos que debería escuchar, lo que significa que se ejecuta de forma asíncrona.
Objetivo: porque soy nuevo en js y node js. ¿Cómo puedo devolver la respuesta de Newman y luego devolverla como el cuerpo de respuesta de la solicitud HTTP? Sé que await no esperará (en) escuchar porque se ejecuta de forma asíncrona
MySolution Que escribo la respuesta de Newman en un archivo. y haga otra solicitud a la función azul para obtener la respuesta.? hay algo mejor que eso?
const newman = require('newman'); // require newman in your project // call newman.run to pass `options` object and wait for callback async function run() { await newman.run({ collection: require('./weather.postman_collection.json'), reporters: 'cli' }, function (err) { if (err) { throw err; } console.log('collection run complete!'); }).on('request', function (error, args) { if (error) { console.error(error); } else { // Log the response body console.log(args.response.stream.toString()); return args.response.stream.toString() } }); } module.exports = { run } const pip = require('./pipline') module.exports = async function (context, req) { context.log('JavaScript HTTP trigger function processed a request.'); const name = (req.query.appName || (req.body && req.body.name)); const responseMessage = name ? "Hello, " + name + ". This HTTP triggered function executed successfully." : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."; const result = await pip.run(context) context.res = { // status: 200, /* Defaults to 200 */ body: args.response.stream.toString() }; }Leer datos del archivo no es una mala idea. Si estás bien con eso. Pero aquí está la solución alternativa para obtener todos los datos cuando llamamos a la solicitud de Newman.
Este script usa el evento Newman .on('request') , que extraerá esa información. O puede usar .on('beforeDone') Si desea todos los cuerpos de respuesta, es posible que deba modificar esto ligeramente y tal vez usar appendFileSync para capturar todas las respuestas de las solicitudes en la colección.
He modificado tu código por favor echa un vistazo
const newman = require('newman'); // require newman in your project // call newman.run to pass `options` object and wait for callback async function run() { await newman.run({ collection: require('./weather.postman_collection.json'), reporters: 'cli' }, function (err) { if (err) { throw err; } console.log('collection run complete!'); }).on('request', function (error, args) { if (error) { console.error(error); } else { // Log the response body console.log(args.response.stream.toString()); // return args.response.stream.toString() Cosnt data = JSON.parse(args.response.stream.toString()); return data; } }); } module.exports = { run }Después de la llamada inicial, solo se han leído los encabezados. Por lo tanto, para analizar el cuerpo como JSON, primero se deben leer los datos del cuerpo del flujo entrante. Y, dado que la lectura del flujo TCP es asíncrona, la operación .json() termina siendo asíncrona.
Nota: el análisis real del propio JSON no es asíncrono. Es solo la recuperación de los datos del flujo entrante que soy asíncrono.