Ich habe vor kurzem mit der Entwicklung einer Node js-Anwendung begonnen und Selenium in einem Controller verwendet, um eine Liste von Elementen von einer Webseite abzurufen und die abgerufene Liste von Elementen als JSON-Antwort zurückzugeben.Rückgabeliste von Objekten mit Knoten js
exports.read_all_products = function (req, res) {
var driver = new webdriver.Builder().forBrowser('phantomjs').build();
driver.get('https://www.test.com/products?PC=' +req.params.category);
driver.wait(until.elementLocated(By.className('product-slide-all')), 20000, 'Could not locate the element within the time specified');
driver.findElements(By.className("product-slide-all")).then(function (elements) {
var arr = [];
elements.forEach(function (element) {
element.getAttribute("innerHTML").then(function (html) {
const dom = new JSDOM(html);
var obj = new Object();
obj.product_name = dom.window.document.querySelector(".product-name").textContent;
obj.product_code = dom.window.document.querySelector(".product-code").textContent;
obj.price = dom.window.document.querySelector(".product-price").textContent;
arr.push(obj);
});
});
res.json(arr);
});
}
Problem ist, ich bekomme immer eine leere JSON-Antwort, obwohl Elemente zum Array hinzugefügt wurden. Ich möchte den richtigen Umgang mit diesem Szenario wissen.
Danke.
Können Sie versuchen, Ihre 'res.json (arr);' one level up? (vor dem '});')? –
Nein, dann wird ein Fehler angezeigt, der besagt, dass die Header nach dem Senden nicht mehr gesetzt werden können. – Lakmal
Ohh. Können Sie in diesem Fall versuchen, Ihre 'res.json (arr);' als 'JSON.parse (JSON.stringify (arr))' 'umzudefinieren? –