前提・実現したいこと
Cherrio-httpcliをExpress.js経由で叩き結果を返したいです。
DcukDuckGoと呼ばれる検索エンジンの検索結果をスクレイピングしたものをクライアントへresしたいです。
発生している問題・エラーメッセージ
以下のコードでduckGo関数をasync/awaitを用いつつ呼び出しているのですが結果が返ってきません。
**main.js** const express = require('express'), app = express(), duck = require('./public/js/duckduck'); app.set("port", process.env.PORT || 3000) app.get('/', (req, res) => { (async() => { const result = await duck.duckGo("テスト") //undefinedの結果。ここで本来はduckduckGoの検索結果が返ってきて欲しい console.log(result); res.send(result); return; })().catch(console.log("done")) }) app.listen(app.get("port"), ()=>{ console.log(`Server リスナ: ${app.get("port")}監視中`); })
**duckduck.js** const client = require('cheerio-httpcli'), $ = require('jquery'), targetURL = 'http://duckduckgo.com/html'; async function duckGo (keyword) { await client.fetch(targetURL, { q: keyword }) .then((result) => { let test = []; result.$('#links').each(function (idx, elm) { // ここで結果が返ってきていることは確認済み test.push(result.$(this).find('h2').text()); }); return test; }) .catch((err) => { console.log(err); }) } exports.duckGo = duckGo
試したこと
duckduck.jsの方で別途、簡易的な関数をつくりreturnさせたところGET側で戻り値を取得できました。
GET側の同期処理も順番通りうまくいっているようですが結果がなぜか返ってこず、参考になりそうな記事を英語でも探してたのですが解決できず質問するに至りました。
補足情報(FW/ツールのバージョンなど)
**package.jsonの中身** { "name": "test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "nodemon main.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "async": "^3.2.0", "cheerio-httpcli": "^0.7.4", "express": "^4.17.1", "jquery": "^3.5.1", "nodemon": "^2.0.4" } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/17 15:33