0
0

More than 3 years have passed since last update.

cradle.js (0.7.1) が動かなかった話

Posted at

cradle使おうとしたんです。
node.jsから驚くほど簡単に使えるNoSQLサーバ Couchbase(CouchDB)を試す!

を参考に、expressのバージョンが上がってるからちょこちょこ修正しつつ、さてDB編集だと言った時にこんなエラーが。

C:\home\minori\program\js\app4\node_modules\cradle\lib\cradle.js:316
            if (! o.__lookupGetter__(attr)) {
                    ^

TypeError: o.__lookupGetter__ is not a function
    at C:\home\minori\program\js\app4\node_modules\cradle\lib\cradle.js:316:21
    at Array.forEach (<anonymous>)
    at C:\home\minori\program\js\app4\node_modules\cradle\lib\cradle.js:315:24
    at Array.forEach (<anonymous>)
    at Object.cradle.merge (C:\home\minori\program\js\app4\node_modules\cradle\lib\cradle.js:314:10)
    at C:\home\minori\program\js\app4\node_modules\cradle\lib\cradle\database\documents.js:71:35
    at Request._onResponse [as _callback] (C:\home\minori\program\js\app4\node_modules\cradle\lib\cradle.js:244:9)
    at Request.self.callback (C:\home\minori\program\js\app4\node_modules\request\request.js:185:22)
    at Request.emit (events.js:210:5)
    at Request.<anonymous> (C:\home\minori\program\js\app4\node_modules\request\request.js:1161:10)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! app4@0.0.0 start: `node ./bin/www`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the app4@0.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Minori\AppData\Roaming\npm-cache\_logs\2019-10-30T18_04_15_163Z-debug.log

パっと見 cradle の中で起こってるエラーなので該当箇所を見てみるとこんな記述が。

cradle.js
cradle.merge = function (target) {
    var objs = Array.prototype.slice.call(arguments, 1);
    objs.forEach(function (o) {
        Object.keys(o).forEach(function (attr) {
            if (o.__lookupGetter__(attr)) {
                target[attr] = o[attr];
            }
        });
    });
    return target;
};

ソースの精査をしていいないので cradle.merge が何やってるかなんとなくしかわからないのですが、DB呼び出す度に2回ぐらい呼ばれてて最後の最後にどうも普通のJsonオブジェクトか何かになる模様。

なのでこう書き換えて動きました。

cradle.js
cradle.merge = function (target) {
    var objs = Array.prototype.slice.call(arguments, 1);
    objs.forEach(function (o) {
        Object.keys(o).forEach(function (attr) {
            if (o.__lookupGetter__ && ! o.__lookupGetter__(attr)) {
                target[attr] = o[attr];
            }
        });
    });
    return target;
};

プルリク送っとこうかな……でもこれでバグが取れきったかどうかわからないしな……

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0