32605


node.jsのexpressで、GETリクエストされた値をJavaScriptプログラムで処理変換して、レスポンスとして返すAPIサーバーをつくっています。

GETリクエストされたら、値を処理変換するJavaScriptプログラムを実行したいのですが、以下のように書くと、new
explorers.Insight();の箇所でTypeError: undefined is not a
functionというエラーが発生し、プログラムが停止してしまいます。

new
explorers.Insight();をexplorers.Insight;に修正すると、エラーは止みましたが、今度はinsight.getUnspentUtxosというメソッドでTypeError:
undefined is not a functionとなりました。

エラーへの対処と、そもそも「GETリクエストされた値を、JavaScriptプログラムで処理変換して、レスポンスとして返す」にはこのような書き方で合っているのか、教えてください。

[code]

    var express = require('express');
    var app = express();
    
    app.set('port', (process.env.PORT || 5000));
    app.use(express.static(__dirname + '/public'));
    
    app.get('/word:word', function (req, res) {
     var bitcore = require('./bower_components/bitcore/bitcore-lib.min.js');
     var explorers = require('./bower_components/bitcore-explorers/bitcore-explorers.min.js');
     var insight = new explorers.Insight(); //ここでTypeError: undefined is not a functionとでる
    
    //以下にGETリクエストを受けたときの処理が続く
    
      res.send(req.params.word);
    });
    
    app.listen(app.get('port'), function() {
      console.log("Node app is running at localhost:" + app.get('port'))
    });
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/VJqpa.png)](https://i.stack.imgur.com/VJqpa.png)

[![画像の説明をここに入力](https://i.stack.imgur.com/L0bq4.png)](https://i.stack.imgur.com/L0bq4.png)


CC BY-SA 3.0
2017-02-10T21:06:49.443
32571
2017-02-12T13:02:31.650
18443
question
javascript node.js
node.js TypeError: undefined is not a function


> new explorers.Insight();の箇所でTypeError: undefined is not a function

本来 new に指定するものは関数でなければならないのに「undefinedは関数ではない」というエラーで、要は `explorers.Insight`
が定義されていないということです。  
※「Insightが見つからない」といったエラーでないのは、未定義のプロパティ参照自体はエラーにならないためです。

原因ですが、 `bitcore-lib.min.js` や `bitcore-explorers.min.js` は Node.js
用ではありません。Node.js上で使う場合は、別途 npm を使ってインストールしてください。

[code]

    # この場合 bitcore-explorers に必要な bitcore-lib は自動的にインストールされるので、
    # bitcore-lib を直接使わないなら別途インストールする必要はありません。
    npm install bitcore-explorers --save
    
[/code]

Node.js には `require()` でモジュールを読み込む機能がありますが、ブラウザには `require()` が用意されていません。そこで
Browserfy というツールでブラウザ向けに変換したものが `bitcore-explorers.min.js`
です。これはもはやNode.jsのモジュールではなく、Node.jsでは使えません。

Node.js 向けライブラリの配布に使われる npm と、ブラウザ向けライブラリの配布に使われる
bower。パッケージ名が同じでも中身が同じとは限らないので、用途に合った方を選ぶ必要があります。


CC BY-SA 3.0
2017-02-12T12:52:52.757
32605
2017-02-12T13:02:31.650
2017-02-12T13:02:31.650
8000
8000
32571
answer