20908
> Error in Success callbackId: Camera463 : TypeError: undefined is not a
> constructor (evaluating 'new NCMB.File(fileName, byteCharacters,
> "image/png")')

というエラーが出るのですが、意味を教えてください。  
niftyのモバイルバックエンドを利用しています。

下記がコードの抜粋になります。

JavaScript

```

    function snapPicture () {
            navigator.camera.getPicture (onSuccess, onFail,
                { quality: 50, destinationType: Camera.DestinationType.DATA_URL});
    
            //成功した際に呼ばれるコールバック関数
            function onSuccess (imageData) {
                var byteCharacters = toBlob(imageData);
                var NCMBFile = new NCMB.File(fileName, byteCharacters, "image/png");
                NCMBFile.save().then(function() {
                  //NCMBサーバーからファイルをダウンロード
                  var getFile =  new NCMB.File(fileName);
                  var image_canvas = document.getElementById("showImage");
                  getFile.fetchImgSource(image_canvas);
                },
                function(error) {
                　// The file either could not be read, or could not be saved to NCMB.
                  alert(JSON.stringify(error));
                });
            }
    
```
CC BY-SA 3.0
2016-01-13T13:04:58.277
20887
2016-01-14T03:29:08.360
2016-01-13T13:56:36.533
9566
13934
question
javascript monaca
Error in Success callbackId:というエラー
## エラーの意味

> Error in Success callbackId: Camera463 :

この部分はMonacaというか内部のCordovaが表示している部分で、どこでエラーが起きたかを示しています。が、これはとりあえず置いておいて次に行きます。

> TypeError: undefined is not a constructor (evaluating 'new
> NCMB.File(fileName, byteCharacters, "image/png")')

これがJavascriptのエラーです。 `xxx is not a constructor`
というのは、コンストラクタではないxxxという値がコンストラクタとして呼び出された、ということを表します。この場合、 `NCMB.File`
はコンストラクタのはずですが、実際には `undefined` だったということになります。

undefinedが意図せずして現れるのは、存在しない変数・プロパティを参照したときが多いです。

## 原因

ニフティクラウド mobile backend の Javascript SDK は去年の9月にVersion2が公開されました。

[SDKガイド (JavaScript) : Version2に伴う変更点 | ニフティクラウド mobile
backend](http://mb.cloud.nifty.com/doc/current/sdkguide/javascript/versionChangeDescription.html)

[`NCMB.File`
コンストラクタ](http://mb.cloud.nifty.com/assets/sdk_doc/javascript/jsdoc_1.2.6/symbols/NCMB.File.html)は
Version1 系のAPIで、現在の最新である Version2
系には存在しないものです。そのため、Version2のSDKで実行するとそのようなエラーになるかと思います。

Version1のサポートは 2016/3/16
で終了するようなのでVersion2に乗り換えたいところですが、Version2のマニュアルでは[「ブラウザやMonacaでのファイルアップロードは今後対応予定です。」](http://mb.cloud.nifty.com/doc/current/filestore/basic_usage_javascript.html)とあり、現時点でMonacaからファイルストアを利用したい場合はVersion1を利用する必要があるようです。

Version1のSDKは現在SDKダウンロードページの一番下からダウンロードが可能です。こちらからダウンロードしなおしてお試しください。

[イントロダクション (JavaScript) : SDKダウンロード | ニフティクラウド mobile
backend](http://mb.cloud.nifty.com/doc/current/introduction/sdkdownload_javascript)
CC BY-SA 3.0
2016-01-14T03:29:08.360
20908
2016-01-14T03:29:08.360
8000
20887
answer