質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

299閲覧

Node.jsでウェブサイトを巡回してダウンロードするコードで 「$ is not a function」というエラーが出る

RMBQsKe5AP10gjx

総合スコア24

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/04/26 23:25

編集2019/04/26 23:27

Node.jsでウェブサイトを巡回してダウンロードするコードで 「$ is not a function」というエラーが出ます。

$("a").each(function(idx){
で発生しています。
解消方法をご教授願います。

var client = require('cheerio-httpcli'); var request = require('request'); var URL = require('url'); var fs = require('fs'); var path = require('path'); var LINK_LEVEL = 3; var TARGET_URL ="https://qiita.com/"; var list = {}; downloadRec(TARGET_URL, 0); function downloadRec(url, level){ if(level >= LINK_LEVEL) return; if(list[url]) return; list[url] = true; var us = TARGET_URL.split("/"); us.pop(); var base = us.join("/"); if(url.indexOf(base) < 0) return; client.fetch(url, {}, function(err, $, res){ $("a").each(function(idx){ var href = $(this).attr('href'); if(!href) return; href = URL.resolve(url, href); href = href.replace(/\#.+$/, ""); downloadRec(href, level + 1); }); if(url.substr(url.length - 1, 1) == '/'){ url += 'index.html'; } var savepath = url.split("/").slice(2).join("/"); checkSaveDir(savepath); console.log(savepath); fs.writeFileSync(savepath, $.html()); }); } function checkSaveDir(fname){ var dir = path.dirname(fname); var dirlist = dir.split("/"); var p = ""; for(var i in dirlist){ p += dirlist[i] + "/"; if(!fs.existsSync(p)){ fs.mkdirSync(p); } } }

エラーコード

TypeError: $ is not a function at Object.callback (/home/test/test21.js:23:5) at Object.fail (/home/test/node_modules/cheerio-httpcli/lib/client.js:90:22) at Object.<anonymous> (/home/test/node_modules/cheerio-httpcli/lib/client.js:254:14) at Object.<anonymous> (/home/test/node_modules/cheerio-httpcli/lib/client.js:184:11) at self.callback (/home/test/node_modules/request/request.js:185:22) at emitOne (events.js:116:13) at Request.emit (events.js:211:7) at Request.onRequestError (/home/test/node_modules/request/request.js:881:8) at emitOne (events.js:121:20) at ClientRequest.emit (events.js:211:7)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

var client = require('cheerio-httpcli');

cheerio-httpcliの、

client.fetch(url, {}, function(err, $, res){

fetchのコールバックの第二引数が$となっており、一見するとこの$がjQueryであるかのようにコードが書いてあるようです。

$("a").each(function(idx){

cheerio-httpcliのコールバックの仕様を一度確認してみると良いのではないでしょうか。
(これがjqueryであるのはちょっと奇妙な仕様であるように思います)

投稿2019/04/30 08:55

otolab

総合スコア765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問