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){varobjs=Array.prototype.slice.call(arguments,1);objs.forEach(function(o){Object.keys(o).forEach(function(attr){if(o.__lookupGetter__(attr)){target[attr]=o[attr];}});});returntarget;};
ソースの精査をしていいないので cradle.merge
が何やってるかなんとなくしかわからないのですが、DB呼び出す度に2回ぐらい呼ばれてて最後の最後にどうも普通のJsonオブジェクトか何かになる模様。
なのでこう書き換えて動きました。
cradle.js
cradle.merge=function(target){varobjs=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];}});});returntarget;};
プルリク送っとこうかな……でもこれでバグが取れきったかどうかわからないしな……